Apidogを使用してAPIのテストを行う場合、現在のテストAPIのリクエストパラメータを他の目的のために抽出する必要がある場合があります。例えば、次のリクエストボディを持つeコマースプラットフォームの注文作成APIを考えてみましょう:
{"id": 12345,"products": [
{"id": 1, "quantity": 2},
{"id": 3, "quantity": 1}
],"shippingAddress": "xx 県 xx 市 xx 区","paymentMethod": "credit_card"
}
このシナリオでは、次のことを行いたいかもしれません:
- リクエストパラメータを抽出して暗号化する:プライバシーを保護するために、送信前に
shippingAddress
パラメータの値を暗号化する必要があるかもしれません。 - リクエストパラメータを変数として保存する:
id
パラメータを「一時変数」として設定し、その後のAPIテスト(例えば、注文状況の確認)で使用する必要があるかもしれません。 - リクエストパラメータを検証する:リクエストを送信する前に、
paymentMethod
パラメータが有効な値かどうかを確認する必要があるかもしれません。
これを処理するには、pm.request
メソッドを使用してAPIからリクエストパラメータを抽出できます。さまざまなパラメータ情報を表示するカスタムスクリプトを作成し、pm.request
をコンソールに印刷できます。例えば:
// 現在のAPIのリクエストパラメータ情報console.log(pm.request);
このメソッドのrequest
はAPIのリクエストオブジェクトを指します。「プレリクエスト」スクリプトでは「保留中のリクエスト」を表し、「ポストリクエスト」スクリプトでは「送信されたリクエスト」を指します。
要件に基づいて、プレリクエストまたはポストリクエストスクリプトで現在のリクエストパラメータを取得するかを決定できます:
- リクエストを送信する前のパラメータについて:プレリクエストスクリプトを使用します。
- リクエストを送信した後のパラメータについて:ポストリクエストスクリプトを使用します。
「プレリクエスト」スクリプトで行った変更のみが有効であることに注意してください。「ポストリクエスト」スクリプトで行った変更は効果を持ちません。
他のAPIからリクエストパラメータを取得するには、環境変数にパラメータを保存してから読み込むか、「テスト」機能を使用できます。「動的値」を使うことで、前のステップ(つまり、他のAPI)からリクエストパラメータやレスポンスデータを直接読み取ることができます。
リクエストパラメータを抽出するステップバイステップガイド
プレリクエストURLを取得する
プレリクエストURLは「環境管理」で設定されたサービスアドレスです。
現在のAPIのプレリクエストURLを取得するには、pm.request.getBaseUrl()
またはpm.request.baseUrl
メソッドを使用できます。例えば:
// プレリクエストURLを取得する
let preUrl = pm.request.getBaseUrl();
console.log(preUrl);
// あるいは
let baseUrl = pm.request.baseUrl;
console.log(baseUrl);
複数のプレリクエストURLが設定されている場合、スクリプトは指定されたサービスに対応するURLを取得します。これらの設定は「編集→サービス(プレリクエストURL)」を通じて確認および管理できます。
パスパラメータを取得する
パスパラメータは、リソースパスを指定するために使用されるURLの一部で、特定のリソースやコレクションを識別する際に使用されます。Apidogでは、パスパラメータは波かっこ{}
を使用して表現され、URLパスに直接含まれます。例えば:
https://Apidogmock.com/xxx/xxx/store/products/{id}
この例では、{id}
は動的に置き換えることができるパスパラメータです。pm.request.url.path
を使用してパスパラメータを抽出でき、これによりすべてのパス名を含む配列が返され、配列インデックスを使用して正確にアクセスできます:
// pm.request.url.pathからパスパラメータを取得する
let getPathUrl = pm.request.url.path;
// データをコンソールに印刷console.log(getPathUrl);
console.log(getPathUrl[4]);
クエリパラメータを取得する
クエリパラメータは、通常、疑問符?
の後に続く追加情報で、キーと値のペアとしてフォーマットされ、&
で区切られます。例えば:
https://Apidogmock.com/xxx/xxx/store/products/{id}?cart_id=42®ion_id=43
クエリパラメータを抽出するには、pm.request.url.query
を使用します。これによりすべてのキーペアが取得できます。その後、get()
メソッドを使用して、特定のパラメータを取得できます。以下は、cart_id
パラメータを抽出する方法です:
// pm.request.url.queryからクエリパラメータを取得する
let getQueryUrl = pm.request.url.query;
// データをコンソールに印刷console.log(getQueryUrl);
console.log(getQueryUrl.get("cart_id"));
完全なURLを取得する
リクエストの完全なURLを取得するには、プレリクエストURL、パスパラメータ、およびクエリパラメータを含む、pm.request.url.toString()
メソッドを使用します:
// 完全なURLをコンソールに印刷console.log(pm.request.url.toString());
このメソッドは、すべてのURL情報を含む文字列を返し、パスパラメータの動的置き換えやすべてのクエリパラメータを含みます。
ボディパラメータを取得する
- form-data形式の場合:Form-dataはデータをキーと値のペアで整理し、ファイルのアップロードや複雑なフォームの送信によく使用されます。form-dataボディパラメータを取得するには、
pm.request.body.formdata
を使用します。これにより配列オブジェクトが返されます:
// ボディタイプがform-dataの場合
let formData = pm.request.body.formdata;
// データをコンソールに印刷console.log(formData);
console.log(formData.get("email"));
console.log(formData.get("password"));
- x-www-form-urlencoded形式の場合:form-dataと同様に、x-www-form-urlencodedもキーと値のペアを使用します。これらのパラメータを取得するには、
pm.request.body.urlencoded
を使用します:
// ボディタイプがx-www-form-urlencodedの場合
let urlencoded = pm.request.body.urlencoded;
// データをコンソールに印刷console.log(urlencoded);
console.log(urlencoded.get("email"));
console.log(urlencoded.get("password"));
- raw、JSON、またはXML形式の場合:
pm.request.body.raw
を使用して、生のボディコンテンツを取得し、文字列を返します。特定のパラメータにアクセスするには、通常、解析が必要です:
// raw、JSON、またはXML形式の場合
let formData = pm.request.body.raw;
// JSONオブジェクトに解析する
let jsonData = JSON.parse(formData);
// データをコンソールに印刷
console.log(jsonData);
console.log(jsonData.email);
console.log(jsonData.password);
ヘッダーパラメータを取得する
リクエストのヘッダーパラメータを取得するには、pm.request.headers
を使用します。これにより、すべてのリクエストヘッダー情報を含む配列オブジェクトが返されます。特定のパラメータ値を正確に見つけて抽出するには、get()
関数を使用します:
// リクエストヘッダーパラメータを取得する
let headers = pm.request.headers;
// データをコンソールに印刷console.log(headers);
console.log(headers.get("Accept"));
リクエストパラメータ取得のFAQ
参照された変数が置き換えられない理由は何ですか?
APIリクエストパラメータが環境変数の値を参照しているが、コンソールの特定の値に置き換えられていない場合は、「変数の置き換え&親を継承」をプレリクエストまたはポストリクエストセクションのスクリプトの最初に移動してください。これにより、すべての参照された変数(動的値を含む)が実際の内容に置き換えられます。
付録
メソッドと説明
メソッド | 説明 | 目的 |
---|---|---|
pm.request | 現在のインターフェースのリクエストパラメータ情報を取得する | リクエストオブジェクトにアクセスする |
pm.request.getBaseUrl() | プレリクエストURLを取得する | サービスアドレスを取得する |
pm.request.baseUrl | プレリクエストURLを取得する(代替メソッド) | サービスアドレスを取得する |
pm.request.url.path | パスパラメータを取得する | URLパスパラメータを抽出する |
pm.request.url.query | クエリパラメータを取得する | URLクエリパラメータを抽出する |
pm.request.url.toString() | 完全なURLを取得する | 完全なURL内のすべてのパラメータを取得する |
pm.request.body.formdata | form-dataボディパラメータを取得する | フォームデータを抽出する |
pm.request.body.urlencoded | x-www-form-urlencodedボディパラメータを取得する | URLエンコードされたフォームデータを抽出する |
pm.request.body.raw | 生、JSON、またはXMLボディパラメータを取得する | 生のリクエストボディコンテンツを抽出する |
pm.request.headers | ヘッダーパラメータを取得する | リクエストヘッダー情報を抽出する |
JSON.parse() | JSON文字列を解析する | JSON文字列をJavaScriptオブジェクトに変換する |
結論
この記事では、プレリクエストURL、パスパラメータ、クエリパラメータ、ボディパラメータ、およびヘッダーパラメータを含む、Apidogでのリクエストパラメータの抽出方法を説明しました。pm.request
オブジェクトとその関連メソッドを使用することで、さまざまなリクエストデータを簡単に取得および操作できます。