JetBrains Rider 2024.1 ヘルプ

応答処理の例

このトピックでは、いくつかの HTTP レスポンス処理の例を調べます。例を試してみるには、auth-requests および test-responses 要求のコレクションを調べましょう。

応答ヘッダー、本文、コンテンツタイプの確認

この例では、次のことを確認するためにいくつかのテストを作成します。

  • 要求は正常に実行されます。つまり、応答状況は 200 です。

  • ヘッダーはレスポンスボディ内で受信されます。

  • レスポンスのコンテンツタイプはアプリケーション /JSON です。

テストを作成するには、クライアントオブジェクトの test メソッドを呼び出します。テスト内では、client オブジェクトの assert メソッドを呼び出して特定の条件をアサートし、応答オブジェクトのさまざまなプロパティを参照して検証できます。

### Check response status, headers, and content-type GET https://httpbin.org/get > {% client.test("Request executed successfully", function() { client.assert(response.status === 200, "Response status is not 200"); }); client.test("Headers option exists", function() { client.assert(response.body.hasOwnProperty("headers"), "Cannot find 'headers' option in response"); }); client.test("Response content-type is json", function() { var type = response.contentType.mimeType; client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'"); }); %}

グローバル変数を使用する

この例では、受信したレスポンスからグローバル変数に値を取得し、その後のリクエストで使用できるようにします。

最初のリクエストには、受信したレスポンス本文の認証トークンを client.globalauth_token 変数に保存するレスポンスハンドラースクリプトが含まれます。これを実現するには、client.global.set(VariableName, VariableValue) 構造を使用します。VariableValue 引数として、サーバーから返されたレスポンス本文token フィールドの値を使用します。この値は、"auth_token" 変数に割り当てられます。

POST https://examples.http-client.intellij.net/body-echo Content-Type: application/json { "token": "my-secret-token" } > {% client.global.set("auth_token", response.body.token); %}

リクエストが実行されると、auth_token 変数は後続のリクエスト ({{auth_token}} 変数内) および応答ハンドラースクリプト (client.global.get("auth_token") 構造を使用) からアクセスできるようになります。

//Accessing a variable GET https://examples.http-client.intellij.net/headers Authorization: Bearer {{auth_token}}

応答ヘッダーから値を取得するには、headers オブジェクトの valueOf メソッドを使用します。同じ名前の複数のヘッダーが受信された場合(これはセットクッキーヘッダーの一般的なケースです)、代わりに valuesOf メソッドを使用してください。これはすべてのレスポンスヘッダー値の配列を返します。

POST https://httpbin.org/cookies //Saving a cookie from the first Set-Cookie header > {% client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]); %}

イベントストリームの各行を処理する

イベントストリームをサブスクライブすると、新しいデータが利用可能になると、サーバーがクライアントにイベントを自動的に送信します。このデータは、サーバー送信イベントまたは改改行コード JSON(NDJSON) の形式にすることができます。JetBrains Rider では、HTTP クライアント response.body.onEachLine メソッドを使用して、このイベントストリームの各行で関数を呼び出すことができます。

金価格に関する情報を定期的に送信するサーバーがあるとします。この例では、次のことを行う応答ハンドラースクリプトを作成しましょう。

  1. サーバーから受信したデータの各チャンク(JSON オブジェクト)を取得し、価格値をログに記録します。リクエストを実行すると、サービスツールウィンドウのレスポンスハンドラータブでログに記録された情報を表示できます。

  2. イベント数が 10 を超えると、受信データの処理を停止します。これにより、イベントストリームのサブスクライブが解除されないことに注意してください。HTTP 接続が開いている限り、イベントの受信を継続します(サービスツールウィンドウのコンソールタブを確認してください)。

  3. 取得したデータのチャンクをテストします。価格が 45 未満の場合、テストは失敗します。テスト結果は、サービスツールウィンドウのテストタブで確認できます。

GET localhost/stocks/subscribe?symbol=GOLD > {% var updatesCount = 0; response.body.onEachLine( (symbolUpdate, unsubscribe) => { updatesCount++; client.log(symbolUpdate.pricePresentation); if (updatesCount > 10) { unsubscribe(); return; } client.test("Price test " + updatesCount, () => { client.assert(symbolUpdate.lastPrice >= 45, "Price must be >= 45"); client.log(symbolUpdate.pricePresentation); }); } ) %}