PostmanでのMock serverの立て方 (2024年5月UI)

Postmanでは、HTTPリクエストを受け付ける[モックサーバー](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-an-api/)を作ることができます。
ここでのゴールは、HTTP POSTを受け付けて `{ "Your payload is": "XXXX" }` を返す、いわゆるEchoサーバーを作ります。

※ほかにも同様の記事があるのですがPostmanのUIは日々進化しているため、2024年5月時点でのやり方の記録です

## Mock server (モックサーバー) メニューを出現させる

モックサーバーを作りたい*ワークスペース*※1を開き、*ワークスペースサイドバーを設定*※2をクリック、*モックサーバー* を有効化。すると、サイドバーに*モックサーバー*が表示されます。

:::note info
* ※1 アカウント作成直後であれば *My Workspace* が対象になります
* ※2 画面左の![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/a1b3eb3f-1099-2904-977e-a33b8a3fa6f7.png)がそれです
:::

:::note info
コレクションを作成 > リクエストを追加 > サンプルを追加という手順でも同様に進められるのですが、モックサーバー側から進むことでURLのランダム生成をしてくれるため、モックサーバーの作成から始める方が手間が少なくて良さそうです
:::

## モックサーバーの作成手順

1. サイドバーの*モックサーバー* > *モックサーバーを作成* を開く
    * コレクションを選択してモックを作成*では、*リクエストメソッド*一覧から `POST` を選択。この時POSTの行が自動的に増えます（GETの行は残りますが、実際はPOSTのみ作られます）。
    * その他のパラメータ(*リクエスト URL*、*レスポンスコード*、*レスポンスボディ*)は、この時点では設定せずに次に進みます。
2. *設定* では、*モックサーバーの名前*を指定(以後、`My1stMockServer`)して、モックサーバーを作成に進みます。

これで、ともかくHTTP POST を受け取るモックサーバーができました。

### リクエストを確認する

サイドバーの*モックサーバー* > *My1stMockServer* を開き、*コレクションドキュメントを見る*を開くと、cURLを始めとしたツール/言語によるリクエストサンプルが提示されています。実行してみましょう。

```bash
curl --location --request POST 'https://***.mock.pstmn.io/' --data ''
```

リクエストを実行した後、改めてサイドバーの*モックサーバー* > *My1stMockServer* を見てみると、ログが１行できていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/93353472-97d9-b3e9-0bd5-3afad3068a7c.png)

## レスポンスボディを追加する

サイドバーの*コレクション* > *My1stMockServer* > *POST* > *デフォルト* と開いていくと、レスポンスボディが設定できる画面にたどり着きます。

*ボディ* に以下のように指定します。

```
{ "your payload is": "{{$body 'payload'}}" }
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/41eeaafd-363b-62fe-11e8-26183848d30c.png)

その後、右上の*保存*をクリックします。設定はこの時点で反映されます。

:::note info
`{{$body}}` というのは、template helperです。詳しくは[Using template helper](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/creating-dynamic-responses/#using-template-helpers)をご覧ください。
他にも `{{$timestamp}}` などの動的データを返してくれる変数が存在します。詳しくは[Generating random data with dynamic variables](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/creating-dynamic-responses/#generating-random-data-with-dynamic-variables)をご覧ください。
※未加工のPOST BODY全体を得る方法を見つけることができませんでした(2024年5月現在)
:::

### POSTボディ付きリクエストを確認する

以下のように送信すると `payload` に設定したデータが返却されます。

```bash
curl --location --request POST 'https://***.mock.pstmn.io/' --data 'payload=Hello'
#=> { "Your payload is": "Hello" }
```

## メソッドやパスの増やし方

Postmanのモックサーバーは、API ゲートウェイプロダクトのように、気軽にメソッドやパスの追加が可能です。

1. サイドバーの*コレクション* > 2. *My1stMockServer* の三点メニュー(右側の "・・・" と表示されている部分) > リクエストの追加 で、*新規リクエスト* を追加できます
    * この時点で *新規リクエスト* の名前変更をしておきましょう。後々の混乱が減少します。以後 `2ndReq` とします
3. *2ndReq* のメソッドを選択(例: GET)し、*URL を入力するかテキストを貼り付け* には `{{url}}/` と入力します
    * `{{url}}` はコレクションの変数です
    * ここで  `{{url}}/foo` とすれば `GET https://***.mock.pstmn.io/foo` で受け付けられます
4. *2ndReq** の三点メニュー > サンプルを追加 で、`2ndReq` が追加できます

ここまでの操作は、それぞれ実行した時点で即時反映されます。

以後は、先ほどの POST で指定した時と同様にレスポンスボディを指定できます。

## 削除

モックサーバーは *コレクション* と *モックサーバー* のそれぞれにいるので、それぞれ削除しましょう。これですっきり。

## おわりに

シンプルなEchoサーバーであれば、簡単に作れます。複雑な条件分岐があるなら、ちゃんとAPIサーバーを立てたほうが良いでしょう。道具は適材適所ですね。

どんなことができるのかや、エンドポイント保護(x-api-key の利用など)は、[公式ドキュメント](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-an-api/)をご覧ください。

https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-an-api/

EoT