Echolot
モック

ルートとダミーデータ

モックのルートを手書きで作成します。JSON、XML、テキストのレスポンス、リクエストごとに変わるダミーデータ、レスポンスを選ぶルール、ルートから作るリクエストを使えます。

ルートは、メソッドとパス、そしてモックがそこで返す応答です。まだ仕様がないとき、開発やテストのために数個のエンドポイントが必要なとき、仕様とは異なる応答をパスに返したいときに、ルートを手書きで作成します。 ボディは送信されるとおりにJSON、XML、テキストで書き、リクエストごとに作り直されるダミーデータを含められます。

手書きのルートは、モックのJavaScriptのルートの後、仕様を提供している場合はその仕様のオペレーションの前に応答します。リクエストが受け取るレスポンスを参照してください。

ルートを作成する

モックページで新規モックを選んでモックを作成する(最初に、5人分のダミーのユーザーを返すGET /usersルートが含まれます)か、既存のモックを開きます。ルートカードに、そのモックのルートが一覧表示されます。

  • チェックボックスで、ルートを削除せずにオフにできます。オフのルートは何も応答しません。
  • ルートをクリックすると、リストの下で編集できます。
  • ルートを追加は、選択したルートの後に新しいルートを追加します。
  • ルートを右クリックすると、複製、リクエストを作成、アドレスをコピー(モックの動作中)、上へ移動、下へ移動、ルートを削除を選べます。

変更はすべてすぐに保存され、動作中のモックにもすぐに反映されます。編集 › 取り消すで、ルートの削除も含め、どの変更も元に戻せます。 オンの2つのルートが同じメソッドとパスを持つ場合、カードに警告が表示されます。応答するのは最初のルートだけです。

ルートGET /users/{id}のエディタ。メソッド、パス、概要、レスポンス200 OK(デフォルト)と404 Not found、OKレスポンスのコンテントタイプ、{{$randomUUID}}を値とするX-Request-Idヘッダー、request.params.idとダミーの値を含むJSONボディが表示されている

メソッド、パス、概要

  • ルート:メソッド(GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS、またはすべてのメソッドを表すANY)とパス。HEADリクエストは、ボディなしでGETルートに渡されます。
  • パスパラメータは{id}または:idと書き、パスの1つの部分につき1つ使います。/users/{id}、/files/{name}.jsonのようになります。:idは{id}として保存されます。固定の部分を持つルートはパラメータを持つルートより優先されるため、/users/meは/users/{id}より先に応答します。
  • 概要は、ルートの用途を説明します。ルートから作成したリクエストは、これを名前にします。

レスポンス

ルートには1つ以上のレスポンスがあります。レスポンスの下のチップで切り替え、+で追加します。各レスポンスには次の項目があります。

フィールド内容
名前リクエストやルールがそれを指す名前。OKやNot foundなど。名前はルート内で一意です。
ステータスステータスコード(100〜999)。
Content-Type送信されるContent-Type。application/jsonやapplication/xmlなど。横のメニューによく使うタイプが並んでいます。空の場合は送信しません。ボディ内の値のエスケープ方法も、これで決まります。
ヘッダー一緒に送信されるヘッダー。ボディと同じように、値にダミーデータやリクエストの一部を含められます。
ルールデフォルトの代わりにこのレスポンスが応答する条件。レスポンスの選択を参照してください。
ボディ送信される内容。JSON、XML、HTMLでは行番号と色が付きます。

チェックマークが付いたレスポンスがルートのデフォルトで、別のレスポンスのデフォルトにするで変更できます。ゴミ箱ボタンで、レスポンスを削除します。

レスポンスの選択

ルートへのリクエストは、次の順序でレスポンスを受け取ります。

  1. リクエストが指定したレスポンス:Prefer: example=Not foundまたはPrefer: code=404ヘッダー、またはPostmanのx-mock-response-nameとx-mock-response-codeヘッダー。
  2. すべてのルールに合致する最初のレスポンス。
  3. ルートのデフォルト:デフォルトにするでデフォルトにしたレスポンス(ルールにかかわらず)。デフォルトを選んでいないルートでは、ルールに合致しなかった最初のレスポンスは、ルールのない最初のレスポンスに道を譲ります。そのため、先頭に置いた「発送済みの注文には409」が、ほかのすべての注文に応答することはありません。

ルールは、リクエストの1つの部分を調べます。

ルール名前例
パスパラメータパスのパラメータidが0
クエリパラメータクエリパラメータpageが*
ヘッダーヘッダー(大文字と小文字は区別しません)X-Roleがadmin
ボディのフィールドJSONボディへのキーのパス。リストの項目は数字で指定し、ボディ全体なら空user.planがpro、items.0.skuがTNT-MH-2P

値は、その部分が持つべきテキストです。*は、何かしらの値があれば何でもよいことを表し、空の値は、その部分が存在しないことを表します。 複数のルールを持つレスポンスは、すべてのルールに合致したときだけ応答します。名前のないルールは、名前を付けるまでスキップされます。

たとえば、GET /users/{id}ルートはデフォルトでユーザーとともに200を返し、ルールパスパラメータ idが0の404レスポンスを持たせられます。

curl -i http://127.0.0.1:4010/users/42    # 200, the user
curl -i http://127.0.0.1:4010/users/0     # 404
GET /users/{id}の404 Not foundレスポンスと「デフォルトにする」、およびそのルール:パスパラメータidが0

ダミーデータを含むボディ

ボディやヘッダーの値にある{{ }}の中身は、リクエストが届いたときに埋め込まれるため、リクエストごとに新しいデータを返せます。ボディのそれ以外の部分は、書いたとおりに送信されます。

{
  "id": "{{request.params.id}}",
  "name": "{{$randomFullName}}",
  "email": "{{$randomEmail}}",
  "company": "{{$randomCompanyName}}",
  "joined": "{{$randomDatePast}}"
}

ダミーの値

{{$randomFirstName}}、{{$randomEmail}}、{{$randomCity}}、{{$randomPrice}}、{{$randomUUID}}など約120種類があります。 名前と職業、インターネット、住所、電話番号、会社、金融、商品、日付、単語、ロレムイプサム、ファイル、画像、データベースに分かれています。 名前はPostmanの動的変数と同じなので、Postman向けに書いたテンプレートがそのまま使えます。 引数を取るものもあります:{{$randomInt(1, 100)}}、{{$randomPrice(5, 50)}}、{{$randomLoremWords(5)}}、{{$randomElement(active, paused, closed)}}。 すべての一覧は動的な値にあります。

ボディの上の値を挿入は、カーソルの位置にダミーの値を挿入します。ダミーデータにグループ別に並んでいます。

同じ値はリクエストでも使え、送信のたびに作成されます。動的な値を参照してください。

リクエストの一部

トークン内容
{{request.params.id}}パスパラメータ。
{{request.query.page}}クエリパラメータ。ない場合は空。
{{request.headers.X-Trace}}ヘッダー(大文字と小文字は区別しません)。
{{request.body.user.name}}JSONボディのフィールド。キーのパスで指定します(リストの項目はitems.0.sku)。テキストはそのまま、数値、true、false、オブジェクト、リストはJSONで挿入されます。
{{request.body}}ボディ全体をテキストで。
{{request.method}}メソッド。POSTなど。
{{request.path}}パス。/users/42など。

値を挿入 › リクエストに、そのルート自身のパスパラメータとともに並んでいます。

リスト

{{#repeat 10}}…{{/repeat}}は、その間の内容を指定した回数だけ書き出します。{{#repeat 2 8}}は、2つの数の間の回数を、リクエストごとに選んで書き出します。 JSONボディでは、項目の区切りのカンマが自動的に付きます。 内側では、{{@number}}が1から数えた項目の番号、{{@index}}が0から数えた番号になります。繰り返しの中に繰り返しを入れられます。

[
  {{#repeat 5}}
  {
    "id": {{@number}},
    "name": "{{$randomProductName}}",
    "price": {{$randomPrice}}
  }
  {{/repeat}}
]

{{#repeat}}や{{/repeat}}だけの行は、空行を残しません。

エスケープ

値は埋め込まれる場所に合わせてエスケープされるため、引用符を含む名前でもJSONが壊れることはありません。

  • JSONボディ(jsonを含むContent-Type)では、文字列の中の値はJSONとしてエスケープされます。{{$randomInt}}や{{@number}}のように引用符の外にある値は、そのまま入ります。
  • XMLとHTML(xmlまたはhtmlを含むContent-Type)では、&、<、>、引用符がどこでもエスケープされます。
  • 三重の波括弧はエスケープしません:{{{request.body}}}は、リクエストのJSONボディをJSONとして入れます。
{ "received": {{{request.body}}}, "at": "{{$isoTimestamp}}" }

Echolotが知らないトークンは、書いたままになります。{{$randomInt(9, 1)}}のように値を作れない場合も書いたままになり、ログに理由が表示されます。 ボディは16 MB、繰り返しは10,000項目で止まります。

ボディはそれ以外を一切読み取りません。ワークスペースの変数、環境、シークレット、ファイルは使えないため、ネットワークで応答するモックから漏れることはありません。

固定データ:生成

{{ }}の値は、リクエストごとに新しいデータを返します。毎回同じデータで応答するには、ボディの上の生成…をクリックします。

  • リストを作成:ボディを1つの項目としますを選ぶと、ボディが、ボディから作成した項目数の項目を持つJSONのリストになります。
  • 選ばない場合は、ボディの値が一度だけ埋め込まれます。

生成はボディを結果で置き換えます。編集 › 取り消すでテンプレートに戻せます。ターミナルからは、echolot fakeで同じことができます。

ルートからのリクエスト

ルートカードのリクエストを作成は、モックの名前を付けたフォルダを作成し、オンのすべてのルートに対するリクエストを入れます。ルートのコンテキストメニューのリクエストを作成は、そのルートだけのリクエストを作成します。Echolotは最初のリクエストを開きます。

  • フォルダには、モックのアドレスを設定した変数baseUrlがあり、すべてのURLがそれで始まります:{{baseUrl}}/users/{{id}}。あとでbaseUrlを実際のAPIに向ければ、同じリクエストがそちらに送信されます。
  • パスパラメータはリクエストの変数になり、デフォルトのレスポンスのパスのルールが値を指定していなければ1になります。
  • リクエストには、ルートの概要が名前として付きます。
  • ルートのリクエストボディも一緒に入ります。

ルートのリクエストボディ

ルートの下部のリクエストボディには、そのルートから作成するリクエストのボディとContent-Typeを設定します。POST /usersが受け取るJSONなどです。 モックの応答は変わりません。ボディのフィールドに対するルールは、実際に送信されたリクエストを読み取ります。

エージェントと使う

モックツールセットをオンにすると、エージェントとアシスタントもルートを作成できます。必要なことを頼んでください。

  • 「注文の一覧、取得、作成のルートをダミーデータ付きで持つモックを作って、開始して」
  • 「idが0のときの404をGET /users/{id}に追加して」
  • 「モックのルートからリクエストを作って」

エージェントは、create_mock(名前とルートを指定します。仕様は不要です)、save_mock_route、delete_mock_route、generate_fake_data、list_fake_values、create_requests_from_mockを使います。 save_mock_routeは、履歴のレスポンスをルートにすることもできます。コピーされる内容は、エージェントが読み取るほかのものと同じようにマスクされます。 エージェントがルートを削除するときは、最初に確認が表示されます。エージェントを参照してください。

ワークスペース内では

ルートはモックのファイルmocks/<name>.tomlに、[[routes]]とその[[routes.responses]]として保存されます。差分で読みやすく、Gitで共有できます。ワークスペースのファイルを参照してください。

このページの内容