このセクションでは、[パラメータライズされたメッセージを生成] トラフィック ウィザードで Virtualize がどのようにメッセージをグループ化するかについて説明します。Virtualize はメッセージごとにレスポンダーを生成するため、生成されるレスポンダーを決定するにはグループ化が重要です。
セクションの内容:
Virtualize がトラフィック解析および適用するグループ化基準は、Virtualize がメッセージをグループ化する方法に影響を与えます。推奨されるグループ化の方法は自動的に選択されますが、必要に応じて調整および上書きできます。
トラフィックは 2 段階で解析および処理されます。
PVA の作成時に、グループごとに 1 個のレスポンダーが生成されます。
推奨するグループ化手法は、以下の経験則に基づいて選択されます。
Virtualize は以下のようにグループ化を行います。
HTTP メソッド (POST、GET、PUT、その他) に基づいて、生成されたメッセージ レスポンダーを分割します。この手法が有効な場合、固有の HTTP メソッドごとにメッセージ レスポンダーが生成されます。
たとえば、順番は関係なく、トラフィックに 10 個の POST メッセージと 15 個の GET メッセージがある場合、Virtualize は生成された PVA で 2 個のレスポンダーを作成します。1 つは POST メッセージ用、もう 1 つは GET メッセージ用です (他のグループ化手法がさらにグループに分割していないものと仮定します)。
作成されたグループをカスタマイズして、複数の HTTP メソッドをキャプチャできるようにすることができます。たとえば、あるグループ内で POST と PUT の両方が有効な場合、POST メソッドを使用するメッセージと PUT メソッドを使用するメッセージがそのグループに一致し、そのグループに割り当てられます。言い換えると、そのグループに基づいて生成されるレスポンダーは、POST メッセージと PUT メッセージの両方に対応します (いずれかを受け入れます)。
一意な 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 個のレスポンダーを作成します。
summary
パス用 (3 メッセージ)contact
パス用 (2 メッセージ)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 を編集する必要はありません。
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 で以下のようにレスポンダーを分割します (各レスポンダーは以下のレスポンダー応答条件基準を持ちます)。
この経験則が 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 でレスポンダーを分割します。
リクエストの内容で評価される 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 |