[VSCode] REST Client は変数を使うとAPIの環境やパラメータ変更が楽になる!
API Gatewayで作成したAPIの動作を確認するとき、何らかのRESTクライアント
を使うと思います。
- curlコマンド
- Postman
- Insomnia REST Client
- Chromeの拡張機能
- など
今回は、私が使っているVisual Studio Codeの拡張機能を紹介します。特に変数が使えるため、APIの環境(開発・本番など)やリクエストパラメータの変更がとても楽に行えます。
おすすめポイント
たくさんあるので、抜粋してご紹介します。
- テキストファイルで管理できる
- 複数のリクエストを同じファイルに書ける
- 変数が使える
- curlコマンドを作れる
- コードスニペットを作成できる
- など
この中でも、「変数が使える」がとても便利です! 「GETしたResponseのパラメータを参照してPOSTする」や「dev環境とprod環境でAPIのPathを変える」などが変数を使ってお手軽にできます。
テキストファイルで管理できる
そのままですね。
- あとから同じテストができる
- 別の人も同じテストができる
- Gitで管理できる
テキストファイルの拡張子を.http
または.rest
にすると、シンタックスハイライトやコード補完のサポートが受けれます。
GETリクエストの例
GET https://hoge.execute-api.ap-northeast-1.amazonaws.com/Prod/version
POSTリクエストの例
URLの直下がリクエストヘッダーです。複数書けます。リクエストボディは、1行空けて書きます。
POST https://hoge.execute-api.ap-northeast-1.amazonaws.com/Prod/version content-type: application/json { "id": "1234" }
複数のリクエストを同じファイルに書ける
###
を区切り文字として使用できるため、次のようにすれば、複数のリクエストを同じファイルに書けます!
GET http://foo.co.jp/aaa/bbb ### GET http://bar.co.jp/xxx/yyy?page=3&count=10 ### POST https://hoge.co.jp/fuga/ content-type: application/json { "id": "1234" }
変数が使える
変数の種類はいくつかあります。
- カスタム変数
- 環境変数
- ファイル変数
- リクエスト変数
- システム変数
環境変数
本番環境、開発環境、などで便利に使えそうです。
VSCodeのユーザ設定(setting.json)を開きます。
例えば下記を追記します。内容は任意で変更してください!
"rest-client.environmentVariables": { "$shared": { "version": "v1", "email": "[email protected]" }, "dev": { "host": "dev.hoge.jp", "version": "v2" }, "stg": { "host": "stg.hoge.jp", }, "prod": { "host": "prod.hoge.jp", } }
設定後、コマンドパレットからRest Client Switch Environment
を選択し、任意の環境変数を選択します。
現在の設定は、VSCodeの右下に表示されています。ここを選択して変更も可能です。
このカスタム変数は次のように{{xxx}}
で参照します。
post https://{{host}}/{{version}}/users content-type: application/json { "email": {{email}} }
ファイル変数
下記のようにファイル内で有効な変数が作れます。
1行の制限があるため、JSONを記述する場合は1行で書きます。
@baseurl = https://hoge.jp/v1 @id = 1111 @name = {"name": "yamada"} ### GET {{baseurl}}/users/{{id}} ### POST {{baseurl}}/users {{name}}
リクエスト変数
特定のHTTPリクエストに名前をつけることができます。これにより、特定のHTTPリクエストの内容等を参照できます。
例えば、ログインAPIを叩いてトークンを取得し、以降はそのトークンを使用するAPIがあるとします。
このとき、下記のように「ログインAPIを叩いて取得したトークンを@token
変数に格納して他のAPIで参照」できます。つまり、トークンをコピペする手間がありません!
# @name login post https://hoge.co.jp/v1/login { "email": "[email protected]", "password": "xxxxxxxxx" } ### @token = {{login.response.body.$.token}} ### get https://hoge.co.jp/v1/users/ Authorization: {{token}}
なお、ログインするAPIは自分で叩く必要があります。その内容が別の箇所で参照可能になります。
次のように環境変数と組み合わせると、異なる環境(開発・本番など)に対するログインと他のAPIアクセスが簡単に記述できます。
# @name login post http://{{host}}/v1/login { "email": {{email}}, "password": {{password}} } ### @token = {{login.response.body.$.token}} ### post https://{{host}}/v1/favorite Authorization: {{token}} { "id": 123, "xxx": "aaa" }
システム変数
あらかじめ用意されている変数です。
- UUID生成
- ランダム整数の生成(最小と最大を指定)
- タイムスタンプの生成
POST https://api.example.com/comments { "request_id": "{{$guid}}", "updated_at": "{{$timestamp}}", "created_at": "{{$timestamp -1 d}}", "review_count": "{{$randomInt 5, 200}}", "custom_date": "{{$datetime 'YYYY-MM-DD'}}" }
私はまだほとんど使ったことは無いですが、時間情報や乱数が必要なAPIのテストをするとき、役に立ちそうです。
さいごに
API開発をしていると、「開発環境にデプロイしてテストしたあと、続けてステージング環境にデプロイして同様にテストして、、、」な事が多いので、とても便利に使えています!
他にもcurlコマンドを生成したり、細かい応答内容が見れたりと便利です。