RESTベースのAPIの動作確認を行うならInsomniaが便利

# APIサーバの動作確認をどうやるか。それが問題だ。
APIサーバ全盛期のサーバサイドですが、RESTベースのAPIサーバとなるとブラウザからでは動作確認が面倒です。

そこで何か良いツールは無いかな？　と思ったら[Insomnia](https://insomnia.rest/)というツールを見つけました。
有償プランもあるツールですが、無償で使える範囲でも十分便利に使えます。

**注意: [InsomniaX](http://semaja2.net/projects/insomniaxinfo/)という別のツールがありますが、これは全く違うツールです。**

# 起動
起動するとこんな感じの画面が出ます。
一番左が保存したAPIリクエストや環境設定、真ん中がリクエスト内容、右がレスポンス結果です。
![スクリーンショット 2017-03-22 12.28.19.png](https://qiita-image-store.s3.amazonaws.com/0/145575/33d475f4-e6a3-f67c-e7de-9b4b155f177b.png)

真ん中の部分で送信するURLとメソッド、パラメータ・ヘッダ内容を選択して"Send"ボタンを押すと、結果が右側に表示されます。

![スクリーンショット 2017-03-22 20.10.35.png](https://qiita-image-store.s3.amazonaws.com/0/145575/d403cdd2-fceb-9de9-e86a-a29e561be23d.png)
![スクリーンショット 2017-03-22 20.17.58.png](https://qiita-image-store.s3.amazonaws.com/0/145575/b17ce8ab-3a3b-483b-055c-ffc6bbd9c28c.png)

さて、ここまでは類似のツールでもよくあることです。
ここでInsomniaにある便利な機能をご紹介。

# environment切り替え
同じAPIだけど、ローカルやdev環境ごとにホスト名が違ったりするのを別々のAPIとして保存するのは時間の無駄です。
環境ごとに異なるパラメータを"environment"として定義することで、それをワンクリックで切り替えることができます。

例えば、"local", "dev1", "dev2"という3つの環境があってホスト名が

- local: api.localhost
- dev1: api.dev1.example.com
- dev2: api.dev2.example.com

だとするなら、このような3つの"environment"を作成して、環境に依存するデータを保存しておけば

![スクリーンショット 2017-03-22 20.25.33.png](https://qiita-image-store.s3.amazonaws.com/0/145575/05d4f539-de90-86c1-e7e9-1635992797b3.png)

![スクリーンショット 2017-03-22 20.25.39.png](https://qiita-image-store.s3.amazonaws.com/0/145575/0773fdc6-5619-6901-0ea2-9c501bc0c84c.png)

![スクリーンショット 2017-03-22 20.25.46.png](https://qiita-image-store.s3.amazonaws.com/0/145575/38a6c776-69c3-ac47-e4b6-8970843a7475.png)

APIのURLは以下のように書くことができます。

![スクリーンショット 2017-03-22 20.28.29.png](https://qiita-image-store.s3.amazonaws.com/0/145575/8b304d20-c212-6455-cd61-48cb12c86de3.png)

`{{basename}}`が選択した"environment"の`basename`の値で置換されるわけですね。

この置換はヘッダ指定などにも使うことができますので、認証情報（ユーザ名・パスワード、トークン）などを環境ごとに切り替えることも可能です。

![スクリーンショット 2017-03-22 21.03.13.png](https://qiita-image-store.s3.amazonaws.com/0/145575/f9f83f8f-aa5c-43cf-f78e-de069a56c38e.png)

# コマンド生成
さらに便利なのは、コマンド生成機能です。右クリックから"Generate Code"を選択すると、

![スクリーンショット 2017-03-22 21.12.18.png](https://qiita-image-store.s3.amazonaws.com/0/145575/08b05bfb-91eb-aa6c-aabb-03acd6c48ea2.png)

さまざまな言語のさまざまなツールで同等の結果を得るためのコードを得ることができます。

![スクリーンショット 2017-03-22 21.25.15.png](https://qiita-image-store.s3.amazonaws.com/0/145575/1a628fda-3b03-840c-fdfc-87645fdb3858.png)
![スクリーンショット 2017-03-22 21.27.34.png](https://qiita-image-store.s3.amazonaws.com/0/145575/d353101c-b7c2-1703-5021-571fd13b223c.png)

このコード生成機能があれば、このツールがない環境でも同じリクエストを実行することができますし、プログラムコードに組み込むことができます。
![スクリーンショット 2017-03-22 21.29.55.png](https://qiita-image-store.s3.amazonaws.com/0/145575/8b0eb1b7-e040-2232-a8ac-b8c47425e3e2.png)


# できればこんな機能が欲しい。　
非常に便利なInsomniaですが、あともう少し。という部分もあります。

## AuthタブがDigest認証や、Bearer認証にも対応してほしい。

リクエストに`Auth`というタブがあって、`Authorization`ヘッダを生成してくれるのですが、Basic認証のみの対応でDigest認証や、Bearer認証には対応していません。

![スクリーンショット 2017-03-22 21.43.05.png](https://qiita-image-store.s3.amazonaws.com/0/145575/ba84e2c9-9ecb-c67c-ef37-b9fb7299dba0.png)

しょうがないので、`Headers`タブで`Authorization`ヘッダを自前で追加する必要があります。ぜひDigest認証や、Bearer認証にも対応してほしいところです。[^1]
[^1]: （2017-06-07追記） Digest認証は[Version 5.0.1](https://insomnia.rest/changelog/5.0.1/)で、Bearer認証は[Version 5.2.0](https://insomnia.rest/changelog/5.2.0/)で対応となりました。


## Validate SSL Cetrificates を environment ごとに設定できるようにしてほしい。

https通信時に証明書の検証を行うかどうかを`Validate SSL Cetrificates`という設定で選択できます。
ローカル環境ではオレオレ証明書で運用することが多いので、この設定がないと困ります。

![スクリーンショット 2017-03-22 21.46.45.png](https://qiita-image-store.s3.amazonaws.com/0/145575/3ac1e134-208a-6612-c312-7bdff0d1ea14.png)

しかし、この設定はグローバルオプションとなっているので、環境ごとの設定ができません。
ちゃんとした環境では証明書の検証を行う必要がある。というときに不便です。

proxyの設定も同じでグローバルオプションになっているようです。


# 詳しいドキュメントは
[こちら](https://insomnia.rest/documentation/)を参照してください。
良いAPIライフを。