はじめに
バックエンドエンジニアのなだまるです。今回は開発環境としてのHTTPクライアントの話をしてみようと思います。
APIの開発をしていて、エンドポイントの動作確認を行う際、 もし、お手元でお使いのエディタがJetBrains製品ならなんと!実はHTTPクライアントが付属してます! 結構使いやすく愛用しているので、紹介してみることにしました。 ちなみに私は以前はPostmanを使っていました。
準備
準備と言っても特段ないんですが、リクエストを記述するためのファイルを作成します。
.rest
か、.http
として作ればHTTPクライアントがそれと認識してくれます。
なので、自分で適当にファイル名をつけて作成するか、Scratchファイル作成から作ればOKです。
ScratchファイルはMacなら Shift+Command+N から HTTP Request を選択します。
文法
IDEAのHTTPクライアントはGUIがあって画面のどこに何を書いてという形ではなく、スクリプトチックです。 基本はこんなかんじ↓
Method Request-URI HTTP-Version Header-field: Header-value
Request-Body
やってみる
上記の文法になぞらえていくつかリクエストの例を並べてみます。
// 普通のGET GET http://example.com ### // Bodyを指定してPOST POST http://example.com/api/users Content-Type: application/json { "id": 1, "name: "natacon" }
###
はファイル内で利用できるセパレーターで、同ファイルにリクエストを複数書けます。
ただのGETは特段説明不要ですね。
POSTのほうも読んだままですが、一点挙げるとしたらHeader-filedとRequest-Bodyの間は一行あける必要があります。
使ってみると地味にうれしいところがあって、
こんなふうに実行した結果を履歴で勝手に保存しておいてくれて、かつ行数のとなりに出ているアイコンからこの結果同士を比較する画面を簡単に開けたりします。このあたりは開発中の変更が見つけやすくて重宝します。
邪魔な方は@no-log
をつけてあげるとでなくなります。
// @no-log GET http://example.com
変数が使いやすい
Postmanとかでももちろんあるんですが、エンジニアの手に馴染む形ではないかなーというところ。
IDEAではJSON形式で設定できるようになっていて、http-client.env.json
もしくはhttp-client.private.env.json
ファイルをプロジェクトに配置することによって変数定義を行えます。
例えばこんなふうに環境ごとのリクエスト先を定義しておいて、
{ "local": { "baseUrl": "localhost:8080/v1/api" }, "dev": { "baseUrl": "https://dev.example.com/v1/api" }, "stage": { "baseUrl": "https://stage.example.com/v1/api" }, "prod": { "baseUrl": "https://example.com/v1/api" } }
リクエストファイルはこうする。
変数参照は{{variable}}
として二重波括弧で囲む。
GET {{baseUrl}}/users
こうしておくと実行時に下記のようにどの変数割り当てて実行する?と聞いてくれるので実行したい環境の切り替えも楽。
おまけ
私はいまのところあまり使うことがなかったのですが、レスポンスの検証も行えます。 軽い実装例だと、こんなレスポンスがあったとします。
{ "users": [ { "id": 1, "name" "natacon" }, { "id": 2, "name" "yuichi" } ] }
それに対しリクエストを下記のようにするとusersオブジェクトの要素数を取得できます。 JavaScript ECMAScript 5.1で書けます。
GET http://example.com/api/users > {% // IDEA側にresponseオブジェクトを作ってくれてる client.log(response.body.users.length) %}
assertとかを使えるので、こういった値などをテストするように書いておけば、ミニマムに手元で一気にエンドポイントの動作確認を行えたりするのです。
おわりに
社内勉強会でもJetBrains製品マジおすすめだよという発表をしたり、またこの記事書いたりほんとズブズブの関係の私なのですが、マジオススメ。