こんにちは。エンジニアの 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 のレスポンスを見て、新しいサービスのヒントにできるとよいですね。