2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Web APIAdvent Calendar 2020

Day 16

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

Last updated at Posted at 2020-12-15

この記事は、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で取得した値を変数にいれて再利用する仕組みがあります。


# @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開発ライフを過ごしていければ幸いです。

それでは。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?