このセクションでは、[パラメータライズされたメッセージを生成] トラフィック ウィザードで Virtualize がどのようにメッセージをグループ化するかについて説明します。Virtualize はメッセージごとにレスポンダーを生成するため、生成されるレスポンダーを決定するにはグループ化が重要です。
セクションの内容:
グループ化とは
Virtualize がトラフィック解析および適用するグループ化基準は、Virtualize がメッセージをグループ化する方法に影響を与えます。推奨されるグループ化の方法は自動的に選択されますが、必要に応じて調整および上書きできます。
トラフィックは 2 段階で解析および処理されます。
- まず Virtualize は、どのグループ化方法を有効にするかを推奨します。
- 次に、Virtualize は選択された方法を適用して、メッセージをグループに分けます。
PVA の作成時に、グループごとに 1 個のレスポンダーが生成されます。
推奨するグループ化手法は、以下の経験則に基づいて選択されます。
- リクエスト ボディに基づいたグループ化: 以下の場合に選択されます。
- SOAP トラフィック
- XML ではないメッセージ形式。カスタム メッセージ形式を含む。
- HTTP ではない traffic
- HTTP メソッドと URL パスに基づいたグループ化: 他の場合に選択されます。ただし、提供されたトラフィックにさまざまな手法がある場合、HTTP メソッドだけが選択されます。
Virtualize は以下のようにグループ化を行います。
- 一般的なものよりも具体的なものを優先します。Virtualize は、他のグループのメッセージには一致しない、そのグループだけの全メッセージに一致する可能な限り具体的な表現を生成します。これにより、生成されたレスポンダーが同じトラフィックに正しく関連付けられます。
- グループ化の順序 (HTTP メソッド、URL パス、URL パラメーター、そしてリクエスト ボディの内容) に従います。たとえば、URL パスがグループ間で区別できるようなパスである場合、Virtualize はリクエストの応答条件を作成しません。これは他のグループ化条件についても同様です。
HTTP メソッドによるグループ化
HTTP メソッド (POST、GET、PUT、その他) に基づいて、生成されたメッセージ レスポンダーを分割します。この手法が有効な場合、固有の HTTP メソッドごとにメッセージ レスポンダーが生成されます。
たとえば、順番は関係なく、トラフィックに 10 個の POST メッセージと 15 個の GET メッセージがある場合、Virtualize は生成された PVA で 2 個のレスポンダーを作成します。1 つは POST メッセージ用、もう 1 つは GET メッセージ用です (他のグループ化手法がさらにグループに分割していないものと仮定します)。
作成されたグループをカスタマイズして、複数の HTTP メソッドをキャプチャできるようにすることができます。たとえば、あるグループ内で POST と PUT の両方が有効な場合、POST メソッドを使用するメッセージと PUT メソッドを使用するメッセージがそのグループに一致し、そのグループに割り当てられます。言い換えると、そのグループに基づいて生成されるレスポンダーは、POST メッセージと PUT メッセージの両方に対応します (いずれかを受け入れます)。
URL パスによるグループ化
一意な URL パスに基づいて、生成されたメッセージ レスポンダーを分割します。一意な HTTP URL パスごとにメッセージ レスポンダーが生成されます。HTTP URL パスによるグループ化設定は、基本的にその一意性を定義します。
この手法に基づいてグループが最初に生成されるとき、URL パスが解析され、メッセージタイプを最も良く表したパス表現が作成されます。パス表現の作成には、本質的に主観的なパス解析アルゴリズムが使用されます。このアルゴリズムは、REST サービスで最も一般的なパターンになるよう設計されていますが、結果を最適にするために、生成されたパス条件の変更が必要なこともあります。
たとえば、トラフィックに以下の HTTP URL パスがある場合 (簡潔にするために、HTTP メソッド、URL パラメーター、その他の要素を省略しています)。
/service/order/v1/1/summary /service/order/v1/2/summary /service/order/v1/2/summary /service/customer/v1/a/contact /service/customer/v1/b/contact /Foo /Foo
Virtualize は、生成された PVA で 3 個のレスポンダーを作成します。
- レスポンダー 1:
summary
パス用 (3 メッセージ) - レスポンダー 2:
contact
パス用 (2 メッセージ) - レスポンダー 3:
Foo
パス用 (2 メッセージ)
なお、これらのレスポンダーは Ant スタイルのワイルドカードを使って生成されます。* はゼロ個以上の文字に一致し、** はゼロ個以上のディレクトリに一致します。詳細と例については「URL パスによるグループ化」を参照してください。
パスベースのデータ ソース応答条件のための設定
Virtualize は、各グループ (レスポンダー) がさまざまな URL パスの値を使って同じリクエストに応答できるよう、新規に PVA を作成するときに URL パス セグメント インデックスを設定します。セグメント インデックスを提供することで URL パス パラメーターを設定します。たとえば以下の URL の場合:
/rest/api/2/version/1234/relatedIssueCounts /rest/api/2/version/4568/relatedIssueCounts /rest/api/2/version/4567/relatedIssueCounts
Virtualize はデータ ソースを使って、5 番目のパスセグメント (4 桁の数字の部分) をパラメータライズします。これらの各 ID のためのレスポンス データはデータ駆動になるため、PVA を編集する必要はありません。
URL パラメーターの存在によるグループ化
HTTP URL パラメーターの存在に基づいて、生成されたメッセージ レスポンダーを分割します。1 個以上の URL パラメーターごとに、メッセージ レスポンダーが生成されます。
たとえば、トラフィックに以下の URL パラメーターがある場合:
?oid=1&category=women ?oid=2&category=women ?oid=1&category=babies ?ssn=1234567890&state=CA&category=silver ?ssn=1234567891&state=CA&category=gold
Virtualize は、id、ssn、および state パラメーターの存在に基づいて、生成された PVA で以下のようにレスポンダーを分割します (各レスポンダーは以下のレスポンダー応答条件基準を持ちます)。
- レスポンダー 1: URL パラメーター oid が存在する (3 個のメッセージ)
- レスポンダー 2: URL パラメーター ssn および state が存在する (2 個のメッセージ)
この経験則が URL パラメーターの値に基づいてグループを生成するのではない点に注意してください。URL パラメーターの値に基づいてグループ化したい場合は手動で構成することができます。URL パラメーターの存在に基づいたグループ化は、[パラメーターのリストが正確に一致する場合にだけ応答条件に一致する] および [パラメーター名が存在する場合、常に応答条件に一致する (値にかかわらず)] オプションを使って構成します。詳細については「URL パラメーターによるグループ化」を参照してください。
URL パラメーターの値によるグループ化
特定の HTTP URL パラメーターの値リストに基づいて、生成されたメッセージ レスポンダーを分割します。1 個以上の URL パラメーター値のリストごとにメッセージ レスポンダーが生成されます。
たとえば、トラフィックに以下の URL パラメーターがある場合:
?oid=1&category=women ?oid=2&category=women ?oid=1&category=babies ?ssn=1234567890&state=CA&category=silver ?ssn=1234567891&state=CA&category=gold
Virtualize は、以下のレスポンダー応答条件基準に基づいて、生成された PVA でレスポンダーを分割します。
- レスポンダー 1: category=women (2 個のメッセージ)
- レスポンダー 2: category=babies (1 個のメッセージ)
- レスポンダー 3: state=CA, category=silver (1 個のメッセージ)
- レスポンダー 4: state=CA, category=gold (1 個のメッセージ)
リクエストボディの内容に基づいたグループ化
リクエストの内容で評価される XPath 表現のリストに基づいて、生成されたレスポンダーが分割されます。各 XPath 表現は、1 つのグループと XML 応答条件基準を表します。
この手法が有効な場合、SOAP メッセージは (デフォルトで) ボディの 1 番目の要素名に基づいてグループ化されます。SOAP ではない XML コンテンツの場合は、ルート要素名に基づいてグループ化されます。
なお、カスタム メッセージ形式 (またはビルトインの非 XML 形式) を使用する場合、XPath 表現は、XML 形式に変換されたリクエストに基づきます。
条件の組み合わせによるグループ化
上記で説明した事例から、1 つ以上のグループ化条件に一致するメッセージのグループごとにレスポンダーを生成します。
たとえば、トラフィック ファイルに以下のメッセージがある場合:
GET /service/order/v1/1/summary?oid=1&category=women GET /service/order/v1/2/summary?oid=1&category=women GET /service/order/v1/2/summary?oid=1&category=babies POST /service/customer/v1/a/contact?ssn=1234567890&state=CA&category=silver POST /service/customer/v1/b/contact?ssn=1234567891&state=CA&category=gold POST /Foo POST /Foo
Virtualize は、レスポンダー/グループごとに以下の条件に基づいてメッセージをグループ化し、レスポンダーを生成します。
グループ/レスポンダー | HTTP メソッド | URL パス | URL パラメーターの存在 | リクエスト ボディの内容 |
---|---|---|---|---|
1 | GET | summary | oid | |
2 | POST | contact | ssn, state | |
3 | POST | Foo | child 1 of Body = myOperation |