EmacsでREST APIをテストする方法は?


34

私はアプリをまとめており、APIエンドポイントをテストできるようにしたいと考えています。特にJSON応答を解析し、後続のテストで返されるデータを使用できる場合は、Emacsがクールな方法だと思いました。

これについてのアイデアはありますか?


最も簡単な方法は、curlシェルコマンドを呼び出し、json readで結果を解析することです。
マラバルバ14年

回答:


45
  • restclientは最も「インタラクティブな」モードです。

    これは、HTTP REST Webサービスを手動で調査およびテストするためのツールです。プレーンテキストクエリシートからクエリを実行し、結果をきれいに印刷されたXML、JSON、さらには画像として表示します。

    レストクライアント

    ワークフローの例はhttp://jakemccrary.com/blog/2014/07/04/using-emacs-to-explore-an-http-api/で確認できます。

  • request.el -HTTPスイスナイフ。

    (request
     "http://httpbin.org/get"
     :params '(("key" . "value") ("key2" . "value2"))
     :parser 'json-read
     :success (function*
               (lambda (&key data &allow-other-keys)
                 (message "I sent: %S" (assoc-default 'args data)))))
    
  • emacs-web-「アイデアは、常にコールバックを使用して応答を収集することです。」

    JSONコールバックフォームでは、データのみを収集できます。

    ;; -*- lexical-binding: t -*-
    (require 'web)
    
    (web-json-post 
      (lambda (data &rest stuff)
         (message "%S" data))
      :url "https://httpbin.org/post")
    

23

古い質問、はい...しかし、誰かがこれをグーグルで検索した場合、別のオプションは、Org Babelを使用してob-http...(melpaからインストールできます。)

を使用するとorg-babel.orghttp」コードブロックを含むファイルを作成できます。これらのブロックが評価されると、HTTP要求を作成し、結果として応答を返します。

これらのブロックに「#+NAME:」属性がある場合、その結果を他のorg-babelブロックで使用できます。これにより、HTTPリクエストの結果を使用した、かなりきちんとした文芸的プログラミングが可能になります。

たとえば、HTTPリクエストを作成し、返されたJSONをRubyで解析することを示す小さな組織ドキュメントを次に示します。

* The request
The following is the example request shown on [[https://github.com/zweifisch/ob-http][ob-http's Github page]]...

It isn't anything fancy, but it is a REST API request, and returns
JSON, so it works for the sake of this demonstration:

#+NAME:ob-languages
#+BEGIN_SRC http :pretty
  GET https://api.github.com/repos/zweifisch/ob-http/languages
#+END_SRC

#+RESULTS:
: {
:   "Emacs Lisp": 7034
: }

Notice how this has a "=#+NAME:=" attribute? This is a name we can use
in other =org-babel= blocks. (As you will see below)

* Using the request
Now that I have an =http= request in an org block with a name... Lets
write something in a completely different language and use our HTTP
request's response:

#+BEGIN_SRC ruby :var langs=ob-languages
  require 'json'
  JSON.parse(langs)['Emacs Lisp']
#+END_SRC

#+RESULTS:
: 7034

The =:var= keyword allowed me to assign the "=langs=" variable in the
Ruby block to the result of the =ob-languages= block [[The request][above]].

This didn't have to be in Ruby, this could have been any language,
including another =http= block.

これは次のようになりorg-modeます。 組織モードのob-http

打撃C-c C-c自動的にその依存性のためにトップのいずれかを評価するボトムブロック(Rubyのもの)に(つまりだ:varブロックのヘッダ内のビット。)。これは、httpリクエストが最初に行われ、結果がさらに処理するためにRubyに渡されることを意味します。

これは、必要な数のブロックと言語で実行できます。

これがニーズに合っている場合ob-httpは、インストール後に少し調整する必要があります。(心配しないでください、それほど多くはありません)

インストール後ob-http、2つの変数をカスタマイズする必要があります:org-src-lang-modes、およびorg-babel-load-languages

そのため、を実行M-x customize-variableすることにより、それぞれをカスタマイズして以下を含めることができます。

org-src-lang-modes:この変数をカスタマイズして、もう1つの言語マッピングを含めることで、リストの最後にもう1つの値を挿入できます。

String: http
Symbol: ob-http

その後C-x C-s、そのカスタマイズを保存できます。

org-babel-load-languages:有効なorg言語のリストにアイテムをもう1つ追加する必要があります。「http」。

ただし、オプションが可能なオプションにない場合は、リストに手動で追加する必要があるかもしれませんが、「状態」をクリックし、「」を選択し:てLisp式を表示することにより、それを行うことができます。最後の閉じ括弧の前:

(http . t)

その後、迅速C-x C-sかつM-x org-reload必要なすべてのはずです。


ファイルの投稿にob-httpを使用するにはどうすればよいですか?
Anuvrat Parashar

2

私はまさにこの目的のためにhttpreplを書きました。HTTPリクエストを発行できるcomintベースのreplを提供します。

https://github.com/gregsexton/httprepl.el

要求の結果を消費する関数を簡単に追加できます。これらは通常、きれいな印刷などに使用されますが、組み込みのjsonライブラリを使用すると、elisp構造への解析が簡単になります。


-1

私がほぼ同じことを自分でやるので、それは完全に可能です。ただし、いくつか注意点があります。まず、ローカルパッチxmlrpc.el ライブラリがあります。これにより、最新のemacsとの非互換性と、リクエストで認証ヘッダーを渡す機能という2つの問題が解決されます。処理中のデータはXMLのJSONですが、設定によってはXMLステップをスキップできる場合があります。

重いRPCのリフティングはすべてlava-rpc.elで行われますが、従うのは難しくありません。ここで、文字列化されたjsonを送信する呼び出しを確認できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.