任意のリクエストヘッダを条件にできるスタブAPIサーバーが見つけられなかったので作ってみました。
名前はスタボンと付けました。
できること
- 特定のリクエストにマッチした場合に、指定の固定値を返す
- 下記を条件にすることができる
- リクエストパス(ルーティングパラメーターも含む)
- リクエストメソッド
- リクエストパラメーター
- リクエストヘッダー
- 下記を固定値として返却できる
- http ステータスコード
- レスポンスボディ(json)
- 上記を設定するファイルとして2つのフォーマットが使える
- YAML(.yml)
- JSON(.json)
- 下記を条件にすることができる
インストール
$ npm i -D stubon
設定ファイルの書き方
YAMLかJSONで書きます。
読み込まれた順にチェックされ、マッチした時点でチェックを終了、そこに指定されているresponseが返されます。「設定されたリクエスト条件 ⊆ 実際のリクエスト」が成り立てばマッチとなりますので、余分なリクエストがあっても大丈夫です。マッチしない場合は404です。
# data.yml
'/aaa/get/{id}': # リクエストパス毎に配列で条件を指定。{}でルーティングパラメータになる。
-
request:
method: 'GET' # 'POST', 'PUT'などを入れる。任意。
params: # ルーティングパラメーターをオブジェクトで指定。任意。
id: '999'
queries: # リクエストパラメーターを指定。任意。
a: 'b'
headers: # リクエストヘッダーを指定。これが欲しかった。任意。
x-hoge: 'hoge'
response:
status: 200 # httpステータスコード
body: # レスポンスボディ
result: 'OK!!!'
-
request:
method: 'GET'
response:
status: 500
body: 'error'
上記の場合は「'/aaa/get/999?a=b'」にヘッダー「x-hoge: hoge」を乗せてGETでリクエストすると、「'{ result: "OK!!!" }'」が200で返されます。
そして、それ以外のGETリクエストは「'error'」が500で返され、
さらに、GET以外は404、といった具合です。
例のように条件の狭いものから順に書くと良い感じで使えます。
サーバーの立て方
コマンドラインからもスクリプトからも立てられます。
$ npx stubon -s ./dev/src -p 8080 --ssl --debug
# -s 設定ファイルを置いてあるディレクトリ。必須です。
# -p サーバーのポート。必須です。
# --ssl オレオレ証明ですがsslでサーバーを立てます。任意です。
# --debug リクエストマッチの様子をログに出します。思うようにマッチしない場合は見てみてください。任意です。
同じものをgulpで立てる場合はこんな感じです。
// gulpfile.babel.js
import gulp from 'gulp';
import Stubon from 'stubon';
gulp.task('stubon', () => {
const options = {
debug : true,
ssl : true,
};
const stubon = new Stubon('./dev/src', options);
return stubon.server().listen(8080);
});
使いどころ
つなぐ予定のAPIがまだできていない、
APIを呼びすぎると怒られるので開発中はスタブにしたい、
特定のレスポンスが欲しいけどAPI開発者にデータを作ってもらうのが面倒だ、
などなど、主に開発環境でお使いいただければと思っております。
最後に
初めての公開で右も左もわからない状態でございます。
ご意見ご感想などいただけますと幸いです。