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
本文にも書いたとおり, リクエスト例のインポート機能をつけたい等の理由でブラウザ拡張は不適だと判断しています. それともご紹介されている拡張でこのようなことが可能なのでしょうか?