😸

[Postman初心者] JSON body内の環境変数は""で囲みましょう!

2024/01/10に公開

はじめに

Postmanではリクエストのbodyをjsonで記載できますが、環境変数を使うときには""で囲う必要があります。しょうもないことと思うかもしれませんが、Postman初心者である私はこれに気が付かず1時間ほど試行錯誤することになったため本記事を残します。

Postmanとは?

Postmanは、APIの開発を支援するためのツールで、APIリクエストの作成、送信、テストを簡単に行うことができます。GUIを備えており、コードを書かずにHTTPリクエストを送信できるため、開発者だけでなく、テスト担当者やプロダクトマネージャーなど、技術的な背景がない人々にも広く利用されています。

アプリ開発をしているとAPIで他システムと連携する機会は多いですが、ちょっとAPIを試したいときにpythonコードを書くのがめんどくさく、どうせなら再利用も考えてPostmanを使ってみようと思いました。

以下、Postmanの公式サイトです。

https://www.postman.com/product/what-is-postman/

Postmanの始め方

下記記事が参考になりました。本記事では始め方に関しては割愛します。

https://qiita.com/Molly95554907/items/e367e83129ea1173c317

以降、基本的な操作方法はわかっているものとして進めます。

実現したいこと

J-QuantsのAPIを実行します。

https://jpx-jquants.com/?lang=ja

このAPIを利用するには最初に登録しているメールアドレスとパスワードからリフレッシュトークンを取得する必要があります。今回は手始めにこのAPIをPostmanで実行します。

J-Quantsのリフレッシュトークン取得APIのリファレンスは下記です。

https://jpx.gitbook.io/j-quants-ja/api-reference/refreshtoken

このAPIを呼ぶリクエストをPostmanで設定すればよいですが、リクエストボディにはpasswordを含める必要があります。passwordをべた書きするのはよくないので、別途グローベルレベルの環境変数として定義してその値を用いる形とします。

ちなみに詳細は割愛しますが、Postmanの環境変数はグローバルレベル、環境レベル、コレクションレベル、リクエストレベル、といくつかのレベルがあります。今回はパスワードを「シークレット」ととして扱いたいため、シークレット設定できるグローバルレベルを使いました。

実施したこと

Postmanのバージョンは10.21.14です。J-QuantsのAPIリファレンスを参考にし、下記設定をしました。

① コレクションの作成

今回はJ-Quantsの各APIリクエストをまとめて管理できるよう「JQUANTS」という名前でコレクションを作成しました。

コレクションの作成
コレクションの作成

② base_urlの定義

次にエンドポイントの設定をします。リフレッシュトークンのエンドポイントはhttps://api.jquants.com/v1/token/auth_userですが、J-Quantsにはこれ以外にも複数のAPIがありhttps://api.jquants.com/v1の部分は繰り返し利用することになりそうです。そこで、繰り返し使う部分をbase_urlとしてコレクションの環境変数に追加しました。

コレクション環境変数
コレクション環境変数

③ エンドポイントの設定

設定したbase_urlを用いてエンドポイントを設定します。下記のように{{base_url}}という変数をURLに埋め込みます。

エンドポイント設定
エンドポイント設定

メソッドにはPOSTを設定します。

④ グローバル環境変数にメールアドレスとパスワードを設定

前述したように、リクエストボディにパスワードを直接書くことを防ぐため、グローバル環境変数にメールアドレスとパスワードを定義します。「タイプ」を「シークレット」に設定すると下記のようにパスワード部分がマスクされます。

(ややこしいですが、jquants-mailの黒マスク部分はブログ用に画像でマスクしている部分です)

グローバル環境変数
グローバル環境変数

あとはbodyにjquants-mailjquants-passwordを設定すればよいです。しかし、今回はここで躓きました。

躓いた内容(""なしで変数を利用)

間違って設定した内容が下記になります。

レスポンスボディ(誤)
レスポンスボディ(誤)

変数部分の{{jquants-mail}}{{jquants-password}}""で囲わずに使っています。普段はpythonをメインに書いていますが、pythonでは変数を""で囲う必要はないためここに問題があるとは思っていませんでした。

bodyの内容
{
    "mailaddress": {{jquants-mail}},
    "password": {{jquants-password}}
}

しかし、この状態で実行すると下記のようにエラーになります。リターンコードが502 Bad Gatewayとなっています。

実行エラー
実行エラー

正しい設定

正しい設定は下記になります。
レスポンスボディ(正)
レスポンスボディ(正)

bodyの内容
{
    "mailaddress": "{{jquants-mail}}",
    "password": "{{jquants-password}}"
}

実行するとリターンコード200になり下記のようにトークンが返されます。(値はマスクしています。)無事にリフレッシュトークンが取得できました。

正常実行
正常実行

おわりに

いかがでしたでしょうか。

私は生成AIの力を借りて2023年から本格的にプログラミングを始めました。もっときちんと経験を積んでいる人からすると「こんなしょうもない内容」ということもあるのかもしれませんが、私は地味にここで時間を使いました。

同じように躓く初心者がいなくなることを願いこの記事を残します。ありがとうございました。

Discussion