APIサーバを作っているととにかくcurlで叩いてレスポンスを| jq .して見て, とやっていてリクエストボディのJSONの中括弧や引用符の対応がとれてなくてイライラしたり, 必要なヘッダをつけ忘れていてハマったり, とにかく非効率な感じがしてきたので, ブラウザ上から操作できるようにして, リクエスト内容の編集も(コマンドラインよりは)簡単にできるようにしてみた.
特徴
使い方
$GOPATH/binにパスを通すかバイナリをパスの通ったところにコピーしておく. APIを試したいホスト(ここではexample.com)を--upstreamオプションで指定.
$ apiconsole --upstream=http://example.com
あとはhttp://localhost:8000/devel/consoleでコンソール画面が開く. コンソール画面のポートは--portオプションで, コンソール画面のパスは--mountオプションで指定可能.
動機
もともとは, いま開発中のプロジェクトのAPIサーバにAPIコンソールをつけたかったというのがあった. このプロジェクトでは, APISchemaのScala版(これもたぶんそのうち公開する)を使って, JSON Schemaに沿ってリクエストやレスポンスをバリデーションしている. バリデーションエラーを返すときには, エラーの詳細情報を表すJSONの中でエラー位置をJSON Pointerで示すようになっているけれど, これは人間がそのまま読むのは少しめんどくさい. そこで, JSONを整形してエラー位置をわかりやすくしたHTMLも返せるようになっている.
もちろんこれがcurlのレスポンスで返ってきてもしかたがないので, ブラウザで見たときだけ(Accept: text/htmlとかがあったときだけ)表示するようにしていたけれど, それだと必然的にPUTやDELETEは試せない. なので, ブラウザでレスポンスを表示しつつ, PUTやDELETEのリクエストを組み立てられるものが欲しかった.
APISchemaにはバリデーション内容だけでなく, ドキュメントに表示するためのリソース例を指定できるようになっているので, 特定のエンドポイントに投げるリクエストの典型例が常に定義されている状態になっている. この情報をとってきてapiconsoleにフィルインすると, 自分でいちからリクエストを組み立てなくてもよくて非常に楽なので, apiconsoleの--appendオプションを使ってコンソール画面を改造して, リクエスト例をフィルインできるようにしている. GUIでリクエストを組み立てられるようにするブラウザ拡張などではなく新たに自分で作ったのはこの辺の事情.
想定FAQ
curlコマンドのインポートできないの?
Pull request歓迎します.
application/json以外のリクエストはできないの?
Pull request歓迎します.
うまく動かないんだけど?
FirefoxとGoogle Chromeでしか確認してないので動かない環境はあるかも.
追記: ブックマークコメントへの返信
APIへのPUTやDELETEもブラウザから試す - 貳佰伍拾陸夜日記chrome extensionでいくつか作られてるよ <a href="https://chrome.google.com/webstore/detail/dhc-resthttp-api-client/aejoelaoggembcahagimdiliamlcdmfm" target="_blank" rel="noopener nofollow">https://chrome.google.com/webstore/detail/dhc-resthttp-api-client/aejoelaoggembcahagimdiliamlcdmfm</a>
2016/02/05 18:27
本文にも書いたとおり, リクエスト例のインポート機能をつけたい等の理由でブラウザ拡張は不適だと判断しています. それともご紹介されている拡張でこのようなことが可能なのでしょうか?

