echolot mock
ワークスペースの手作りのルートやOpenAPIドキュメントのモックを、ターミナルやCIで提供します。遅延、失敗の注入、リクエストのチェックにも対応します。
echolot mock はモックを提供します:ワークスペースに保存されたモック(手作りのルートと、あれば仕様を含む)か、OpenAPIドキュメントです。
OpenAPIドキュメントのオペレーションは、ドキュメントに書かれた例か、スキーマから作ったボディで応答します。APIが存在する前にクライアントを作るときや、
CIジョブに望みどおりに応答するサーバが必要なときに使えます。モックページと同じモックを提供します。
echolot mock <source> [--workspace <workspace>] [--port <port>] [--share] [--delay <ms>] [--failure-rate <percent>] [--no-validate] [--routes <file>]<source> は仕様ファイル(YAMLまたはJSON)、または --workspace を指定した場合は、そのワークスペースに保存されたモックの名前です。
仕様をモックにする
echolot mock Alpenglow.echolot/specs/alpenglow.yaml --port 4010Mock of Alpenglow demo shop: 9 operations at http://127.0.0.1:4010/v1 (Ctrl-C stops it)モックは、仕様の最初のサーバのパス(ここでは /v1)で応答します。応答したリクエストは、標準出力に1行ずつ出力されます:ステータス、メソッドとパス、一致したオペレーション、
応答の出どころ、所要時間。リクエストの問題は、その下に一覧表示されます。
200 GET /v1/products/TNT-MH-2P → GET /products/{sku} (generated) 0 ms
400 POST /v1/orders → POST /orders 0 ms
body $.lines: expected array, got stringリクエストは仕様に照らしてチェックされます。 パラメータやボディが仕様に反するリクエストには、何が問題かを示す 400 が返ります。
{
"error" : "The request does not match the spec (POST /orders).",
"problems" : [
"body $.lines: expected array, got string"
]
}--no-validate を指定すると、そのようなリクエストにも応答します。
応答の選び方。 デフォルトでは、オペレーションは最初の成功レスポンスと最初の例で応答します。リクエストで別のものを指定するには、Prefer: code=404, example=empty か、
Postmanの x-mock-response-code ヘッダーと x-mock-response-name ヘッダーを使います。
ワークスペースのモックを提供する
--workspace を指定すると、<source> はモックページに保存したモックを指します(mocks/ 内のファイル名から .toml を除いたもの、またはモックの名前)。
そのポート、遅延、失敗率、リクエストのチェック、選択したレスポンス、ルートが適用され、指定したオプションがそれらを上書きします。JavaScriptのルート(mocks/<name>.js)が最初に応答し、
次に手作りのルート、最後に仕様が応答します。スクリプトによるルートとルートとダミーデータを参照してください。
echolot mock shop -w Alpenglow.echolot --delay 300ルートだけのモックには、仕様は不要です。
echolot mock storefront -w Shop.echolotMock of Storefront: 3 routes at http://127.0.0.1:4321 (Ctrl-C stops it)
200 GET /users/42 → GET /users/{id} (OK) 1 ms
404 GET /users/0 → GET /users/{id} (Not found) 0 ms各行には、応答したルートと、括弧内に返したレスポンスが表示されます。ボディ内のダミーの値は、リクエストごとに作り直されます。サーバなしでダミーデータを作るには、 echolot fakeを参照してください。
オプション
| オプション | 意味 |
|---|---|
-w、--workspace <folder> | モックがあるワークスペースのフォルダ。 |
--port <port> | ポート。デフォルトはモック自身のポート、なければ4010。 |
--share | このMacだけでなく、すべてのネットワークインターフェースで応答します:コンテナやスマートフォン向けです。 |
--delay <ms> | 各応答の前に待つミリ秒数。 |
--failure-rate <percent> | 注入した 500 で応答するリクエストの割合(パーセント)。 |
--no-validate | 仕様に反するリクエストを 400 で拒否せず、応答します。 |
--routes <file> | 仕様より先に応答するJavaScriptのルート。デフォルトはワークスペースのモックの mocks/<name>.js。 |
--share を指定しない場合、モックは127.0.0.1だけで待ち受けるので、ネットワーク上のほかのものからはアクセスできません。--share を指定すると、このMacに到達できるすべてのユーザがアクセスできます。
モックの上限を超えるリクエストボディには 413 が返り、ルートには届きません。
CIで使う
モックをバックグラウンドで起動して、それに対して実行します。Alpenglowの Local 環境は {{baseURL}} を http://localhost:8787/v1 に向けているので、ポート8787のモックがそのリクエストに応答します。
echolot mock Alpenglow.echolot/specs/alpenglow.yaml --port 8787 &
echolot run Alpenglow.echolot --env local --folder catalog
kill %1終了コード
モックは、停止するまで動作し続けます。オプションが正しくない場合や、ワークスペースにないモック名の場合は 64 で、仕様を読み込めない場合やポートが使用中の場合は 1 で終了します。