VisualStudioCode Rest ClientでAPI動作を確認する時にチョットコマルことの解決方法

この記事は、Web API アドベントカレンダーの16日目の記事です。

# はじめに
なんらかのAPIを使ってアプリケーションを開発をする際、まず全体設計をするため、
連携するAPIの動作を確認すると思います。
VisualStudioCodeには、RestAPIの動作を確認するための超絶便利なアドインである
「Rest Client」というものがありまして、こちらを使えば簡単にAPI動作を確認することができます。
このアドイン、超便利なだけあって色々高機能なので、今ご利用の方でも、知らない機能が
あるかもしれませんので、紹介していきたいと思います。

# 基本の使い方
「Rest Client」の基本的な使い方については、こちらの記事によくまとまってますので、
まずはこちらご覧ください。
https://qiita.com/toshi0607/items/c4440d3fbfa72eac840c#basic%E8%AA%8D%E8%A8%BC
これだけでも、かなりのことができるというのは分かると思います。
でもね！まだここに知られていないものがあるんですよ！

ここからは分かりやすくするために、Q&A方式で書いていきたいと思います。

## Q. Restful APIでしか使えないんでしょう？
### A. GraphQLとSOAPでも使えるんです！
API連携といえば、今は多くのAPIがRestfulが提供されていると思いますが、マイクロサービスの流れもあってGraphQLが増えてきています。また、一昔前にはSOAP APIもありました（今でもあると思いますが）。
Rest ClientではRestfulAPIの他に、GraphQLとSOAPでも使うことができます。
例えばGithubではGraphAPiを使用することができますが、
下記のような形で使うことができます。

#### Github APIのToken発行
まず、GithubのGraphAPIを使うために、Tokenを発行する必要があります。
下記のページを参考にTokenを取得してください。
https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token

#### RestClientでの記述
RestClientでは、リクエストヘッダに`X-REQUEST-TYPE: GraphQL`を設定すると、
GraphQLの記述が使えるようになります。GithubのGraphQLではエンドポイントが単一で、
POSTのみとなるので、まとめると下記の通りとなります。
先に発行したTokenは`Authorization: Bearer`として付与してください。

```
POST https://api.github.com/graphql
Authorization: Bearer *******************************
Content-Type: application/json
X-REQUEST-TYPE: GraphQL

query {
  viewer {
    login
  }
}
```

responseは下記となります。

```
{
  "data": {
    "viewer": {
      "login": "wonohe"
    }
  }
}
```

## Q. AWS APIには使えないの？
### A. 使えます！
AWS CLIなどを使わずに呼び出すAWS APIでは、リクエストヘッダに署名をつける必要があります。
Authorizationヘッダーに署名をつけるだけなので、下記のような形で記載すれば呼び出せます。

```
GET https://httpbin.org/aws-auth HTTP/1.1
Authorization: AWS <accessId> <accessKey> \
[token:<sessionToken>] [region:<regionName>] [service:<serviceName>]
```


## Q. 都度発行するトークンをコピペするのがめんどくさいんだけど・・・・
### A. それ変数にできますよ！
APIを呼び出す時に、ヘッダーに固定のTokenをつける仕組みであれば、問題ないのですが、都度
アクセストークンなどを発行して付与する形だと、転記するのが面倒です。
でもRest Clientなら大丈夫！
APIで取得した値を変数にいれて再利用する仕組みがあります。

```bash

# @name gettoken
POST http://example.com/gettoken
Accept: application/json
Content-Type: application/x-www-form-urlencoded

client_id={{client_id}}

### 下記のようにレスポンスがくるものとする
### {
###   "access_token": "ovk1agqgc324bbjwo40vgqm9fe30",
###   "token_type": "Bearer",
###   "expires_in": 3600
### }
@token = {{gettoken.response.body.$.access_token}}

GET http://example.com/getdata?page=1
Accept: application/json
Authorization: Bearer {{token}}
```

上記の例では、`/gettoken`のエンドポイントで取得したtokenを、`getdata`というエンドポイントの
リクエストヘッダに付与して認証する形での利用を想定しています。
トークン取得するリクエストに名前をつけて、その名前でレスポンスにアクセスします。
上記では`@name gettoken`という箇所がそれにあたります。
`gettoken`のセクションで取得した内容がjsonの場合は、

```
gettoken.response.body.$.access_token
```

のように、レスポンスのjsonにアクセスできます。
`gettoken.response.body.$`以降にキーを指定します。
レスポンスがHTMLやXMLの場合は、XPathが利用できるので

```
gettoken.response.body.$.//data[0]/@access_token
```

という記述になります。「$」までがレスポンスのルートになっていて、
そこから先はXathだったりJSONだったりで記述が変わる形ですね。

# 最後に
今回、VisualStudioCodeの拡張である「RestClient」の使い方を3点紹介しました。
基本的にはHTTP、もしくはHTTPS形式の通信であればほぼカバーできますし
RestClientのREADMEにも詳細が書いてあります。

vocoder-restclient
https://github.com/Huachao/vscode-restclient

興味がある方は熟読してみると新しい発見があるかもしれません。
皆様が良いAPI開発ライフを過ごしていければ幸いです。

それでは。