RestClientのススメ
APIをとりあえず叩いて確認したいときがありますが、今まではcurlだったりPostmanだったりを使っていました。
ただわざわざそれだけのためにPostman起動するのも面倒だし、curlはちょっと複雑なAPIになると少し不便です。
なんかいいのないかなーと色々試してみた結果、最近はVSCodeのRestClientに落ち着いています。
REST Client - Visual Studio Marketplace
.http または .rest という拡張子のファイルにリクエストを定義しておくと簡単にリクエストを飛ばせる、といったような拡張です。
構文としては次のような感じ
GET http://XXX.ap-northeast-1.elb.amazonaws.com/users HTTP/1.1
最後のHTTP/1.1は省略可能。
せっかくなのよく使う機能を紹介してみる。
- POSTでJSON飛ばしたい
- 複数のリクエストを定義したい
- 変数定義したい
- レスポンスの値を取得したい
- multipartでファイルアップロードしたい
- Basic認証
- GraphQLリクエストを飛ばしたい
- UUIDやランダムな数字を付与したい
POSTでJSON飛ばしたい
POST http://XXX.ap-northeast-1.elb.amazonaws.com/users
Content-Type: application/json
{
"name": "lunastera"
}
複数のリクエストを定義したい
### で区切れば別リクエストとして定義できます。
GET http://XXX.ap-northeast-1.elb.amazonaws.com/users ### GET http://XXX.ap-northeast-1.elb.amazonaws.com/entries
変数定義したい
@変数名 = 値のようなシンタックス。
@url = http://XXX.ap-northeast-1.elb.amazonaws.com
@name = lunastera
POST {{url}}/users
Content-Type: application/json
{
"name": "{{name}}"
}なんかこの書き方するとbodyの変数展開が赤く表示されてダメそうに見えるけど普通に通ります。
変数はどこで参照されているかも見れるので便利。
個人的には scheme, host, port, boundary 辺りをよくトップに定義しています。
ただトップに定義した場合、使用されている場所が自明だとしても n reference のようなCodeLensが表示されまくって逆に見づらくなったりするので、トップにschemeを定義して1行開ける、というような使い方をしています。
@scheme = https
@host = XXX.ap-northeast-1.elb.amazonaws.com
@port = 443
@url = {{scheme}}://{{host}}:{{port}}
@boundary = ----ExampleBoundary
レスポンスの値を取得したい
これがとにかく便利。
例えば
GET {{url}}/entries/1というリクエストを飛ばして
{
"title": "タイトル",
"content": "コンテンツ"
}のようなレスポンスが帰ってくる時、
# @name entry1
GET {{url}}/entries/1
@title = {{entry1.response.body.$.title}}のような定義をして上記リクエストを飛ばすと @title に タイトル という文字列が入ります。便利!
multipartでファイルアップロードしたい
@boundary = ----Boundary
POST {{url}}/upload
Content-Type: multipart/form-data; boundary={{boundary}}
--{{boundary}}
Content-Disposition: form-data; name="input"; filename="data.csv"
Content-Type: text/csv
< /path/to/path/data.csv
--{{boundary}}--< ファイルへのパスと記述することで任意のファイルを指定できます。
Basic認証
GET {{url}}/login
Authorization: Basic dXNlcjpwYXNzd2Q=スペース区切りでusernameとpasswordを記述すると自動でBase64エンコーディングしてくれます。
GET {{url}}/login
Authorization: Basic user pass
GraphQLリクエストを飛ばしたい
POST {{url}}/graphql
Content-Type: application/json
Authorization: Bearer xxx
X-REQUEST-TYPE: GraphQL
query ($name: String!) {
...
}
{
"name": "lunastera"
}
UUIDやランダムな数字を付与したい
{{$guid}}や{{$randomInt min max}}といった動的な特殊変数があるのでこの辺使いましょう。