COLOPL Engineers' Blog

2012.08.07

コマンドラインとブラウザで JSON API を手軽に試す

こんにちは。エンジニアの hatak です。

ウェブサービスにおいて API を開発するケースでは、サーバからのレスポンスが HTML ではなく JSON などのデータフォーマットになることがあります。 この API が RESTful な設計である場合、ブラウザでは扱いにくい PUT / DELETE などのメソッドを使うケースもあります。

このような API を試すときに手軽にできる方法を、コマンドラインとブラウザでそれぞれまとめてみました。

今回はダミーの JSON を返す簡易的なサーバを用意しています。 レスポンスに対して、下記のキーを JSON 形式で応答するだけのシンプルなサーバです。

  • query_strings : GET で送信されるクエリストリング
  • body_parameters : POST/PUT で送信されるボディパラメータ
  • method : リクエストの HTTP メソッド
  • message : ダミー文字列

ローカルのポート 5000 番で立ち上げたサーバに対してリクエストを送りながら試してみます。

コマンドラインで試す - curl

コマンドラインで手軽に試す方法としては、curl コマンドがあります。

$ curl -s -i "http://localhost:5000"
HTTP/1.0 200 OK
Date: Tue, 07 Aug 2012 08:42:00 GMT
Server: HTTP::Server::PSGI
Content-Type: application/json
Content-Length: 86

{"query_strings":{},"body_parameters":{},"method":"GET","message":"Hello JSON World!"}

"-i" オプションでレスポンスヘッダの表示が行えます。 GET や POST のリクエストを試してみると、ちゃんとレスポンスに反映されていることがわかります。

$ curl -s -i -X GET "http://localhost:5000/?a=hoge&b=fuga"
HTTP/1.0 200 OK
Date: Tue, 07 Aug 2012 08:43:45 GMT
Server: HTTP::Server::PSGI
Content-Type: application/json
Content-Length: 107
{"query_strings":{"a":"hoge","b":"fuga"},"body_parameters":{},"method":"GET","message":"Hello JSON World!"}
$ curl -s -i -X POST  -d 'a=hoge' -d 'b=fuga' "http://localhost:5000/"
HTTP/1.0 200 OK
Date: Tue, 07 Aug 2012 08:44:35 GMT
Server: HTTP::Server::PSGI
Content-Type: application/json
Content-Length: 108

{"query_strings":{},"body_parameters":{"a":"hoge","b":"fuga"},"method":"POST","message":"Hello JSON World!"}
$ curl -s -i -X PUT  -d 'a=hoge' -d 'b=fuga' "http://localhost:5000/"
HTTP/1.0 200 OK
Date: Tue, 07 Aug 2012 08:44:41 GMT
Server: HTTP::Server::PSGI
Content-Type: application/json
Content-Length: 107

{"query_strings":{},"body_parameters":{"a":"hoge","b":"fuga"},"method":"PUT","message":"Hello JSON World!"}

しかし、よく見るとレスポンスの JSON が読みにくい状態のままなので、JSON を読みたいときは Perl のワンライナーを通すことで整形します。

$ curl -s -X GET "http://localhost:5000/?a=hoge&b=fuga" | perl -MJSON -E "say to_json(decode_json(<>), { pretty => 1 });"
{
   "query_strings" : {
      "a" : "hoge",
      "b" : "fuga"
   },
   "body_parameters" : {},
   "method" : "GET",
   "message" : "Hello JSON World!"
}

curl コマンドは cookie をファイルとして保存し、リクエスト時に付加することもできます。また、任意のリクエストヘッダを付与することもできます。これらのオプションを組み合わせれば、認証がかかっているような API でも気軽に試すことができます。

ブラウザで試す - Firefox RESTClient

コマンドラインよりももっと簡単に試したい、というときに便利なのがブラウザです。しかし、通常のブラウザでは PUT / DELETE などのメソッドは使えません。 そこで、Firefox の RESTClient というアドオンを利用します。

インストールすると、[ツール] メニューに [RESTClient] という項目が追加されます。 あとは Method を選択、URL を入力したあとに "SEND" をクリックするとレスポンスが表示されます。

タブを切り替えると JSON を綺麗に整形して表示してくれるので手軽ですね。

POST / PUT でボディパラメータを送りたい場合は、 Body に入力をした上で Headers に "Content-Type: application/x-www-form-urlencoded" をつける必要があります。[Headers] - [CustomHeader] から追加できます。

Web には多くの JSON API が提供されてるサービスがあります。実際に API のレスポンスを見て、新しいサービスのヒントにできるとよいですね。