JavaScript
Node.js
api
npm
stub

スタブAPIを作るnpmパッケージ作って公開してしまった

任意のリクエストヘッダを条件にできるスタブ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開発者にデータを作ってもらうのが面倒だ、

などなど、主に開発環境でお使いいただければと思っております。


最後に

初めての公開で右も左もわからない状態でございます。

ご意見ご感想などいただけますと幸いです。


参考