Postman APIを活用したPostmanデータCRUD処理の自動化

これは[Postman Advent Calendar 2024](https://qiita.com/advent-calendar/2024/postman)の7日目の記事。本記事では、Postman APIの概要と、Postman APIを活用したPostmanデータのCRUD処理の自動化のサンプルを紹介します。

# Postman APIとは？

Postmanアカウントで設定するPostmanのデータはPostmanクラウドに保存されます。

Postman APIとは、この自分のPostmanアカウントで設定するPostmanデータを管理・操作するためのAPIです。Postman APIを使用することで、このPostmanデータをプログラムで操作し、簡単に外部の開発ツールや自動化の処理に組み込むことができます。

Postman APIで管理可能なデータの種類や、データの種類ごとに実現可能な操作内容など詳細についてはPostman APIリファレンスを参照ください。

https://documenter.getpostman.com/view/12959542/UV5XjJV8

また、実際にPostman APIを試してみる際は、パブリックに公開されているPostman API用コレクションがあるので、それをフォークしてご自身のワークスペースでお試しいただくのが良いでしょう。

[Postman API公式コレクション](https://www.postman.com/postman/workspace/postman-public-workspace/documentation/12959542-c8142d51-e97c-46b6-bd77-52bb66712c9a)


# クイックスタート

クイックスタートとしてPostman APIコレクションを自身のワークスペースにフォークしてPostman APIを試す方法を紹介します。ここではあるワークスペースにあるコレクション一覧を取得するAPIを題材に解説します。

## 1. Postman APIコレクションをフォーク

まずは、パブリックに公開されている[Postman API用コレクション](https://www.postman.com/postman/workspace/postman-public-workspace/documentation/12959542-c8142d51-e97c-46b6-bd77-52bb66712c9a)を、自分の作業用ワークスペースにフォークします。コレクションのフォークの仕方について詳しくは下記ページが参考になります。

https://learning.postman.com/docs/collaborating-in-postman/using-version-control/forking-elements/

## 2.Postman APIキーの取得

Postman API利用のためにはPostman API キーが必要です。次の流れでPostman APIキーの管理ページに遷移します。もしくは [go.postman.co/settings/me/api-keys](https://desktop.postman.com/?desktopVersion=10.23.0&userId=27917608&teamId=6029) に直接アクセスしてもAPIキー管理ページに遷移できます。

**「個人のアイコン (画面右上)」＞ 「設定 (Settings)」 ＞ 「API Keys」**

![postman-api-key-management-page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/9a910217-da2b-7600-39aa-ea14f059951a.png)

Postmanキー管理ページで「Generate API Key」ボタンをクリックすることでAPIキーが生成されます。なお、APIキーの文字列は生成時にしか表示されないので、そのタイミングで必ずクリップボードなどにコピーしておいてください。

## 3. APIリクエストの設定・送信

上述のとおり、ここではワークスペースのコレクション一覧を取得するAPIを利用します。1でフォークしたコレクションのWorkspacesフォルダ配下の「Get a workspace」リクエストを選択します。

![select-get-workspace.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/d10839ac-ce2a-8168-6b77-08816998cbaa.png)


### 3-1. APIリクエストのAPIキー認可設定

選択したAPIリクエストにAPIキー認可設定をします。Postman APIのエンドポイントにリクエスト送信する際に、リクエストヘッダーに`x-api-key`キーの値としてAPIキーをセットします。Postman アプリのUIでは、APIリクエスト設定の認可タブをクリックし、認可タイプに`APIキー`を選択して下記項目を入力します。

- キー: x-api-key (全角半角関係なし)
- 値:  2️で取得したAPIキー文字列を入力
- 追加先: 「ヘッダー」を選択

![auth-setup-api-key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/8a2423a9-ef19-9ff7-3f0b-b62eb91d6731.png)


なお、APIキーの文字列は秘匿情報に当たるので、直接上記の値入力エリアに記入するのではなく、環境変数もしくはPostman Vaultを活用するとよいでしょう。Postmanにおける秘匿情報の扱いについて、詳しくは下記ページにまとめてあります。

https://qiita.com/yokawasa/items/05913df60aea07395903#%E5%A4%89%E6%95%B0%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%9F%E7%A7%98%E5%8C%BF%E6%83%85%E5%A0%B1%E3%81%AE%E6%89%B1%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6



### 3-2. ワークスペースIDを取得

コレクション一覧取得対象のワークスペースを開き、「⋯」メニューをクリックして、「Workspace info」をクリックしてください。UUID形式のワークスペースIDが表示されます。例）7a652b7f-8a07-4078-a135-3d693361b27x

![workspace-info.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/aba9016e-de2e-b451-5edb-df9b6590f9f3.png)

### 3-3. APIリクエスト送信

Postman APIコレクションのWorkspacesフォルダ配下の「Get a workspace」リクエストの`{{workspaceId}}` に3-2で取得したワークスペースIDをセットして次のようにリクエスト送信します。無事コレクション一覧が取得されることを確認してください。

![get-workspace-response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103420/e6b3aa25-0f5c-7c69-363a-a3c980b3b427.png)


## [参考] curlで送信例

参考までに、curlコマンドでの送信方法を紹介します。次のようにワークスペースIDをパスパラメータにセットし、リクエストヘッダーに`x-api-key`キーの値としてAPIキーをセットして送信します。

```sh
curl --location 'https://api.getpostman.com/workspaces/<workspaceId>' \
--header 'X-API-Key: <Postman-API-Key>'
```

# Postman APIを活用したPostmanデータのCRUD処理例

ここでは、Postman APIを活用したPostmanデータのCRUD処理例を紹介します。

## 例1: Postman CLI経由で全てのコレクションのテストを実行

あるワークスペースにあるすべてのコレクションをPostman CLIで実行するサンプルです。

[あるワークスペースにあるすべてのコレクションをPostman CLIで実行する方法](https://gist.github.com/yokawasa/d1523fc5aa11be1514f798ba0a6d97ea)

コレクション一覧取得にクイックスタートでも紹介した下記APIを利用しています。

- ワークスペース中の全てのコレクションを取得するAPI: [GET - Get a workspace](https://documenter.getpostman.com/view/12959542/UV5XjJV8#3a56b6f8-8d0c-410f-a933-03e26589c742)

## 例2: OpenAPIを元にしたコレクション作成・更新の自動化

OpenAPI Specファイルを元にPostmanのコレクションの作成・更新を自動化するサンプルです。

https://qiita.com/yokawasa/items/006039e86f22d26dbe58#postman-api%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%9B%B4%E6%96%B0

ここではコレクションの作成・更新にそれぞれ次のAPIを利用しています。

- コレクションの作成: [Post - Create a collection](https://documenter.getpostman.com/view/12959542/UV5XjJV8#049042b8-447f-4f71-8b79-ae978cf40a04)
- コレクションの更新: [PUT - Replace a collection's data](https://documenter.getpostman.com/view/12959542/UV5XjJV8#bc8b292b-ffbb-4c67-a2a1-2fc416e2aef8)

## 例3: モックサーバー作成

Postman API を使用してコレクションをモックする方法の実践的なデモンストレーションです。

https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-with-api/#create-a-mock-server-with-the-postman-api

ここではそれぞれ次のAPIを利用しています。

- コレクションIDの取得: [GET - Get all collections](https://documenter.getpostman.com/view/12959542/UV5XjJV8#fa95fa93-5aa8-4146-94a6-bfebc1a578b4) 
- 環境IDの取得: [GEt - Get all environments](https://documenter.getpostman.com/view/12959542/UV5XjJV8#b7ace502-4a5a-4f1c-8164-158811bbf236) 
- モックサーバーの作成: [POST - Create a mock server](https://documenter.getpostman.com/view/12959542/UV5XjJV8#296628ed-d49b-4206-b4a7-d622e693945c)
- モックサーバーの取得: [GET - Get all mock servers](https://documenter.getpostman.com/view/12959542/UV5XjJV8#52a729a4-4a36-46e5-bfdf-fda0af228d2f)

コレクションIDと環境IDをPostman APIを活用して取得していますが、これらIDはモックサーバー作成時に利用します。

```json
{
  "mock": {
    "name": "testAPImock",
    "collection": "<your-collection-id>",
    "environment": "<your-environment-id>"
  }
}
```

## 例4: モニター実行の自動化

Postman API を使用してモニターを実行する方法を解説してます。CI/CD、監視ダッシュボード、その他の使用するアプリなどのワークフローにモニターの実行を統合できるようになります。`/monitors`エンドポイントを使用する方法と `/webhooks` エンドポイントを使用する２つの方法を紹介しています。

https://community.postman.com/t/how-to-run-a-monitor-with-the-postman-api/68976

ここではmonitors、webhooksでそれぞれ次のAPIを利用しています。

- `/monitors`エンドポイント
  - モニターの作成: [POST - Create a monitor](https://documenter.getpostman.com/view/12959542/UV5XjJV8#419dd5ae-5fb8-476b-b070-c05accc3aaba)
  - モニターの実行: [POST - Run a monitor](https://documenter.getpostman.com/view/12959542/UV5XjJV8#688c4c2a-58b6-4f26-b06b-1f45508ee1d4)
- `/webhooks` エンドポイント
  - Webhookを使用してコレクションの実行をトリガーの作成 (モニターが作成される): [POST - Create a webhook](https://documenter.getpostman.com/view/12959542/UV5XjJV8#7552368b-7fc3-4f9b-a3e2-e229c3f6d299) 

## 例5: 環境変数の初期値の更新

環境変数の初期値の更新方法を紹介する記事です。

https://qiita.com/nezumi_hari/items/326041019e14432a5f55

Postman CLIやNewman経由のテスト実行においてテスト実行中に更新される変数の値は現在値(Current Value)です。現在値はローカルにしか保持されず、クラウドに保存されません。一方、Postman CLIやNewmanはテスト実行開始時に初期値(Initial Value)を参照します。したがって、その更新された変数値を次のPostman CLIやNewmanでのテスト実行時に参照するには初期値を更新する必要があります。そして、変数の初期値を変更するにはPostman APIの活用が必要となります。環境変数の初期値更新には次のenvironments APIを利用します。

- 環境変数の更新: [PUT Update an environment](https://documenter.getpostman.com/view/12959542/UV5XjJV8#9f175bea-1df5-44e6-af33-bf2de7f85bb5)

# さいごに

今後良いサンプルを見つけ次第こちらに追加していきます。Stay tuned!