Data Bank またはインライン式を使用して、リクエスト値を抽出してレスポンスを設定できます。
Data Bank によるリクエスト値の抽出
Data Bank ツールは、受信リクエストから JSON または XML 値を抽出し、関連するレスポンスの要素で値を使用できるようにします。任意のメッセージ レスポンダーの受信リクエストに Data Bank ツールを追加できます。Data Bank については、このドキュメントの他の箇所で詳しく説明しています。以下のリンクのいずれかを参照してください。
データ ソース値、変数、および抽出した値でツールをパラメータライズ
インライン式によるリクエスト値の抽出
インライン式を使用して、XPath 式を使用してリクエスト値を抽出できます。式を作成するときは、次の規則に従ってください。
- 一重引用符 (
'
) のみを使用してください。 - 式内またはデフォルト値で中括弧 (
{}
) を使用しないでください。
受信リクエストに対して評価される式を使用して、テキスト コンテンツをパラメータライズできます。次の構文を使用します。
${{=expression}}
たとえば、受信リクエストの名前フィールドの値を抽出するために記述された式は、次を使用できます。
${{=/root/name/text()}}
受信リクエストは、次のような XML ペイロードです。
<root> <name>my name</name> </root>
日付と時刻を操作する関数
関数を使用して、正または負のオフセット値を設定し、日付または時刻を前後に移動することで、日時を操作できます。'1y 2M 34d 567h 8m 9s'
の形式を使用して、オフセットする年/月/日/時間/分/秒を指定します。これらのオフセットは正でも負でもよく、単位はどれが欠けてもよく、単位間のスペースは無視されます。たとえば、次の各オフセットは、日付を 1 年、1 か月、および 1 日進めます。
'1y1M1d'
'1y 1M 1d'
'+1y1M1d'
逆に日付を 1 年、1 か月、1 日戻すには、先頭にマイナス (-) を付けます。例:
'-1y1M1d'
日付と時刻関数は、1 つまたは 2 つの形式パラメーターを取ります。入力側と出力側で異なる形式が必要な場合は、2 つのパラメーターを使用します。Java の日付形式が使用されるため、以下に示す例はどれも使用可能です。
'yyyy-dd-MM'
'ddMMyyyy'
'yyyyMMdd HH:mm'
'dd-MM-yyyy HH:mm:ss'
関数の例
日付と時刻の関数をどのように作成するかは、どの日付と時刻からオフセットするか (現在の時刻または指定した時刻)、入力と出力に同じ日時形式を使用するかどうかなど、いくつかの要因によって決まります。
現在時刻からのオフセット
sv:date-math('offset', 'outFormat')
現在時刻をオフセットし、指定された形式で返します。たとえば、
${{=sv:date-math('-1y 2d 3h', 'yyyy-MM-dd HH:mm:ss')}}
これは現在の時刻から 1 年 2 日 3 時間後の日付を返します。
指定された日付から同じ形式でのオフセット
sv:date-math('offset', 'format', 'date')
指定された日付を指定された形式でオフセットし、同じ形式で返します。たとえば、
${{=sv:date-math('1y', 'yyyy-MM-dd', '2022-08-11')}}
これは '2023-08-11'
を返します。
指定された日付から異なる形式でのオフセット
sv:date-math('offset', 'outFormat', 'date', 'inFormat')
指定された日付を指定の inFormat でオフセットし、指定の outFormat で返します。たとえば、
${{=sv:date-math('1y', 'MM/yyyy', '2022-08-11', 'yyyy-MM-dd')}}
これは '08/2023'
を返します。
XPath の使用
パラメーターは、期待値に解決される XPath 式として渡すこともできます。例:
sv:date-math('1y', 'yyyy-MM-dd', /root/date/text()) sv:date-math(/root/offset/text(), 'MM/yyyy', /root/date/text(), 'yyyy-MM-dd')
すべての関数は sv 名前空間内にあります。サポートされている他の XPath 式と同様に使用できます。例:
"nextYear" : "${{=sv:date-math('1y', 'yyyy-MM-dd', /root/date/text())#2023-01-01}}"
関数が何かを評価できない場合 (たとえば、指定された XPath 式が値として評価されない場合)、式は指定のデフォルト値を返します。デフォルト値が指定されていない場合は ""
を返します。たとえば、
"${{=sv:date-math('1y', 'yyyy-MM-dd', /root/date/text())#2000-01-01}}"
この式が返す内容は、リクエスト ペイロードに含まれる日付要素によって異なります。日付要素 2022-08-11
が含まれているとします。式は 2023-08-11
を返します。しかし、リクエスト ペイロードに日付要素がない場合は、式は 2000-01-01
を返します。
エラーが原因で (たとえば無効なオフセット形式など) 関数を評価できない場合は、エラーが返されます。
ヘッダーまたは URL から情報を抽出する関数
サポートされているいくつかの関数のうちのひとつを使用して、 ペイロードの一部ではない情報をリクエストから抽出することができます。 具体的には、ヘッダーまたは URL から抽出します。
関数の例
URL 全体、URL の指定されたパスセグメント、または URL パラメーターを抽出することができます。ヘッダーの抽出も可能です。
URL の抽出
sv:url()
リクエストの宛て先の完全な URL を返します。例:
"http://localhost:9080/path1/path2/?param1=val1$param2=val2"
ヘッダーの抽出
sv:header('headerName')
ヘッダーの値を返します。同名のヘッダーが複数ある場合は、インデックスで区別できます。たとえば、
${{=sv:header('name', 2)}}
これは、ヘッダー name の 2 番目に出現する値を返します。同名のヘッダーが複数あり、インデックスで区別しない場合は、最初に出現したヘッダーの値が返されます。
URL パラメーターの抽出
sv:url-parameter('parameterName')
その URL パラメーターの値を返します。同名のパラメーターが複数存在する場合、インデックスで区別することができます。たとえば、
${{=sv:url-parameter('name', 2)}}
これは、URL パラメーター name の 2 番目に出現した値を返します。同名のパラメーターが複数あり、インデックスで区別しない場合は、最初に出現したパラメーターが返されます。
URL パス セグメントの抽出
sv:url-path(index)
指定されたインデックスの URL パス セグメントを返します。たとえば、
${{=sv:url-path(0)}}
これは最初のパスセグメントを返します。前述の URL の例 http://localhost:9080/path1/path2/?param1=val1$param2=val2 の場合、これは path1 が返されることを意味します。
XPath の使用
パラメーターは、期待される型に解決される XPath 式として渡すこともできます。例:
sv:header(/root/headerName/text(), /root/index/text())
すべての関数は sv 名前空間内にあります。サポートされている他のインライン式と同様に使用できます。例:
"nameValue" : "${{=sv:header('name')#foo}}"
関数が期待どおりに評価できない場合 (たとえば、指定されたヘッダー値がない場合)、式は指定されたデフォルト値を返します。デフォルト値が指定されていない場合は ""
を返します。たとえば
"${{=sv:header('header1')#defaultHeader1Value}}"
これは、header 1 が存在する場合は header1Value
を返し、存在しない場合は defaultHeader1Value
を返します。
レスポンダーのインライン式の生成
レスポンダーのリクエスト テンプレートに基づいてメッセージ レスポンダーのインライン式を生成することで、レスポンス ペイロードのパラメータライズを高速化できます。この機能は、リテラル、複数のレスポンス、または シーケンス レスポンス 入力モードを使用するメッセージ レスポンダーで利用できます。
いくつかの前提条件があります。
- メッセージ レスポンダー (または個々の複数/シーケンス レスポンス) のリクエスト テンプレートに入力する必要があります。詳細については、「メッセージ レスポンダーの概要」の「リクエスト テンプレート」を参照してください。
- 固定メッセージ レスポンダーを設定する場合、[Store request for each response] オプションを有効にすることで、リクエスト テンプレートに自動的に入力されるように設定できます。詳細については「トラフィックからの「固定メッセージ」レスポンダーの作成」を参照してください。
- リクエスト ペイロードには、レスポンス ペイロードの値と一致する値が含まれている必要があります。
- 適切な日時形式が [日付フォーマット] 設定パネルに入力済みです。これにより、日時を表す文字列値が正しく認識され、解析されるようになります。「その他の設定 」の「日付フォーマット」を参照してください。
インライン式を生成するには、次の操作を行います。
- メッセージ レスポンダーを開きます。
- [レスポンス] タブをクリックします。レスポンダーの入力モードが複数レスポンスまたはシーケンス レスポンスの場合、[メッセージ] タブをクリックします。
- テキスト ボックス内を右クリックし、[インライン式の生成] を選択します。
- レスポンダーの入力モードが複数レスポンスまたはシーケンス レスポンスの場合、左側のパネルでレスポンスを右クリックして [インライン式の生成] を選択することもできます。
- レスポンダーの入力モードが複数レスポンスまたはシーケンス レスポンスの場合、左側のパネルでレスポンスを右クリックして [インライン式の生成] を選択することもできます。
- 変更を保存します。