LoginSignup
19
20

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-10

任意のリクエストヘッダを条件にできるスタブ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開発者にデータを作ってもらうのが面倒だ、
などなど、主に開発環境でお使いいただければと思っております。

最後に

初めての公開で右も左もわからない状態でございます。
ご意見ご感想などいただけますと幸いです。

参考

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20