WebAPIとPostmanについて

このページで書くこと

- APIが何なのか理解すること
- Postmanの使い方について理解すること


通信の処理を書くときに、「Postmanを使ってAPI叩いて」と言われて理解できないという事がありましたので、自分への理解も兼ねて、Postmanについて、そして前提となるAPIについて、簡単にまとめていきたいと思います。

# APIとは
APIとは、「どのアプリケーションでも共通で利用することのできる関数のまとまり」のことを指します。
例えばあるシステムがあるとして、そのシステムを色々な方に利用してほしいとします。
告知するのですが、そのシステムの開発者以外はシステムの内部を知らないため、どんな事ができるのか、どんなメリットがあるのかを他の人は知ることができません。
こんなとき、そのシステムがどんなことができるのか、その処理がまとめてあって外部から簡単に使えるようになっていると、他の開発者はそのシステムでどんな事ができるのか理解しやすくなり、実装に取り入れやすくなりますね。
このように、他のアプリケーションでも共通して利用することのできる関数のまとまりをAPIと呼びます。

参考：https://qiita.com/busyoumono99/items/9b5ffd35dd521bafce47

# WebAPIとは
WebAPIとはネットワークを介したAPIで、URLを利用します。
特定の決まり事を守ったURLを投げることでWebAPIを利用することができ、どんなクライアントでもサーバーにアクセスしてデータを取得することができるようになります。

URLにはHTTPやHTTPSがついています。これは、HTTPを使うことでWebAPIを利用し、様々な処理を行えるようにしているのです。これをHTTPメソッドと呼びます。

HTTPメソッドはいろいろな種類がありますが、一般的に使われるのは以下のものです。

- GET：リソースの取得
- POST：リソースの作成・追加
- PUT：リソースの更新（作成）
- DELETE：リソースの削除

これらの処理をURLのみで行うことができるのがHTTPメソッドの良さです。


とても便利なのですが、WebAPIの仕様を確認するためには、毎回認証したりテストのコードを書いたりする必要があり、かなりの手間がかかります。そこで登場するのが、Postmanです。



# Postmanとは

Postmanは、APIのアクセスやテスト、認証、モックの作成などを行うことができるツールです。
API関連ですべきことのほとんどは、Postmanで可能だと言って良いでしょう。

# Postmanの基本的な使い方

今回は、Postmanを使ってサーバーにアクセスしてみたいと思います。
Postmanは、「何をしたいか（GET/POSTなど）」、APIに必要なURLとトークン、そしてパラメータを設定すれば、サーバにアクセスして処理を行うことができます。
Postmanをダウンロードして開くとこのようなページが表示されます。

<img width="1374" alt="スクリーンショット 2020-02-05 22.24.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/e22f3353-af38-e1bc-bb18-ab05b67cd89d.png">

「GET」と書いているプルダウンで、POSTやPUTなどに処理を切り替えることができます。
また、その右のフォームには該当するAPIのURLを入力します。

まずは、ユーザー登録の場合、どのような入力が必要なのか、考えていきます。
ユーザー登録の場合は、値を入力してサーバーに保存するので「POST」の処理となります。
GETをPOSTに変更します。
そして、POSTのAPIのURLを入力します。
<img width="1353" alt="スクリーンショット 2020-02-05 22.34.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/bf1918f1-d998-8c67-fd7a-8c2915379d81.png">
次に必要なのは、「何を保存するか」です。
「どんな情報を保存するのか」はJson形式で提供されていることが多いです。
その提供されているJsonを「Body」に入力します。
Bodyタブをクリックして、該当するJsonを中に記入しましょう。
Jsonを入力する際は、 `raw` の設定にしてプルダウンから `JSON` を選択しましょう。
<img width="761" alt="スクリーンショット 2020-02-05 22.41.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/9ad8d9ef-fabf-308d-262d-1d6e7d252929.png">

この状態で、右上の[Send]をクリックします。
すると、下のレスポンス部分に値が返ってきます。
<img width="730" alt="スクリーンショット 2020-02-05 22.43.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/693cb4f0-f432-eb58-3a1a-b69585a4bf0c.png">

ここでは、サーバーと通信して新しくidとtokenが振られています。
トークンとは、認証を通過するための許可証のことです。
これを持っていることで登録画面を通過したユーザーであることがわかります。
（しかしトークンは一時的なものなので、一定の時間が立つと効果がなくなります。）

次はGETをおこないます。
例えば先ほどの認証を通過したユーザーだけがタイムラインを取得できる場合、どのようにPostmanに入力すると、タイムラインのデータを取得することができるでしょうか。
まず、処理を「GET」に変更し、URLを入力します。
そして、取得できるパラメータを「Params」タブに入力します。
<img width="1316" alt="スクリーンショット 2020-02-05 22.52.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/0ab8da72-e99b-d340-eecc-bbc91a0dd52a.png">
最後にトークンをHeadersタブに入力します。
Headersとは、API通信を行うときにいれるべき値を入力するためのもので、トークンは「Authorizaiton」というキーに入力することになります。
トークンの手法はいくつかあるのですが、今回はBearer認証という「それを持っているだけでOK」な認証方式なので、valueに「Bearer トークン名」と記入します。
<img width="1284" alt="スクリーンショット 2020-02-05 23.00.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/9b5cd453-a382-bbab-4cf8-4421abbbf3f4.png">

これで完了...と思いましたがサーバーエラーが出てしまいました。
事実確認してまた更新します！