JSON リスト プロセッサの一般的な使用例は、動的なアイテム数を持つリストを含む API リクエストを処理することです。例えば、次のようなリクエストを送信したとします。

リクエスト
{
    "request": {
        "items": [
            { "id": 1, "name": "William" },
            { "id": 2, "name": "Beverly" },
            { "id": 3, "name": "Richard" }
        ]
    }
}

以下のようなレスポンスを期待するとします。

期待されるレスポンス
{
    "response" : {
        "itemResponses" : [
            { "id": 1, "name": "William", "balance" : 72500.13 },
            { "id": 2, "name": "Beverly", "balance" : 33000.99 },
            { "id": 3, "name": "Richard", "balance" : 42010.75 }
        ]
    }
}

これを実現するには、JSON リスト プロセッサを使用します。以下のワークフローがその方法を示しています。

  1. 新しい .pva を作成し、スイートに JSON レスポンダーを追加します。

  2. JSON レスポンダーで、[オプション] > [リクエスト テンプレート] に移動し、上記のサンプル リクエスト ペイロードを追加します。
  3. [レスポンス] タブで、以下のリテラル ペイロードを追加します。
    {
        "response" : {
            "itemResponses" : [
                ${Outgoing List}
            ]
        }
    }
    注:${Outgoing List} 変数は、JSON リスト プロセッサーによって処理された各アイテムの集約されたレスポンスを使用して、実行時に解決されます。
  4. 変更を保存します。
  5. レスポンダーの受信リクエスト出力に JSON List Processor を連結します (右クリック > [出力の追加] > [ペイロード] > [JSON リストプロセッサ])。

  6. JSON リスト プロセッサが item オブジェクト ノードを抽出するように設定します。生成された XPath は、items 配列の下にあるすべてのアイテムを自動的に選択します。

  7. 変更を保存します。
  8. (オプション) 実行時の可視​​性を高めるために、拡張ツールを使用して処理済みの各項目をコンソールに出力できます。
    1. 拡張ツールを JSON リスト プロセッサに連結します (右クリック > [出力の追加] > [受信項目] > [拡張ツール])。
    2. 拡張ツールに次の Groovy スクリプトを追加します。
      import com.parasoft.api.Application
      def showMessage(input, context) {    
      Application.showMessage("Extension Tool Output - Incoming Item:\n" + input + "\n")
    3. 変更を保存します。
  9. データソース応答条件を実行するには、スイートにテーブル データ ソースを追加します (右クリック > [新規追加] > [データ ソース] > [テーブル])。
  10. [1行目は列名を表す] チェックボックスをオンにします。
  11. 次のデータを追加します。
    idnamebalance
    1William72500.13
    2Beverly33000.99
    3Richard42010.75
  12. 変更を保存します。
  13. JSON リスト プロセッサに JSON メッセージ レスポンダーを連結します (右クリック > [レスポンダーの追加] > [JSON メッセージ レスポンダー])。レスポンダーの名前を「Success Responder」にします。
  14. [オプション] > [リクエストテンプレート] に移動し、次のペイロードを追加します。
    {
       "id": 1,
       "name": "William"
    }
  15. [データソース応答条件」> [リクエスト ボディ] に移動し、id フィールドの応答条件を設定し、データソース列 id を使用します。
  16. [レスポンス] タブをクリックし、次のリテラル ペイロードを追加します。
    {
        "id" : ${id},
        "name" : "${name}",
        "balance" : ${balance}
    }
  17. 変更を保存します。
  18. .tst または .pvn ファイルを使用して仮想アセットに POST リクエストを送信し、期待どおりのレスポンスが返されることを確認します。

エラー処理

.pva でエラーを処理する方法はいくつかあります。上記で作成したレスポンダー スイートに、次のいずれか (または両方) を追加します。

オプション 1:  無効なアイテムに対してカスタム エラー メッセージを返す

アイテムの ID がデータソースに存在しない場合、そのアイテムに対してカスタム エラー メッセージを返すことができます。

  1. JSON メッセージ レスポンダーを JSON リスト プロセッサに連結します (右クリック > [レスポンダーの追加] > [JSON メッセージ レスポンダー] ) 。
  2. レスポンダーに「Error Responder – Return error for invalid id」という名前を付けます。
  3. [レスポンス] タブをクリックし、次のリテラル ペイロードを追加します。
    {
        "id" : “${{=/root/id/text()}}”,
        "error" : {
            "code" : "NOT_FOUND",
            "message" : "No active account found for id '${{=/root/id/text()}}'."
          }
    }

    このペイロードは、インライン式を使用して、受信した JSON から直接値を抽出します。あるいは、JSON データバンクを使用して値を抽出することもできます。

  4. 次のペイロードを含む POST リクエストを仮想アセットに送信し、レスポンスにエラー メッセージが含まれていることを確認します。
    {
        "request": {
            "items": [
                { "id": 1, "name": "William" },
                { "id": 13, "name": "George" },
                { "id": 2, "name": "Beverly" },
                { "id": 3, "name": "Richard" }
            ]
    }

オプション 2: 無効な項目を無視して集計しない

送信リストから無効な項目を除外したい場合は、エラー レスポンダーに空のレスポンスを設定します。これにより、JSON リスト プロセッサはそれらの項目を集計から除外します。

  1. JSON メッセージ レスポンダーを JSON リスト プロセッサに連結します (右クリック > [レスポンダーの追加] > [JSON メッセージ レスポンダー] ) 。 
  2. レスポンダーに「Error Responder – Ignore invalid id」という名前を付けます。
  3. [レスポンス] タブをクリックし、空のリテラル ペイロードを設定します。
  4. 上記のオプション 1 で説明したようなエラー レスポンダーを設定している場合は、無効にします。
  5. 仮想アセットに最後の POST リクエストを再送信し、無効な項目がレスポンスに含まれていないことを確認します。
  • No labels