
switch ポリシー条件エディターの使用
switch ポリシー条件エディターは、switch ポリシーの case
節の条件を作成するときに役立つユーザー・インターフェースとして機能します。
条件スクリプトの作成は、「グループの追加」オプションと「条件の追加」オプションを使用して、演算子を選択し、事前に提供されている関数を選択することで行います。 結果の条件スクリプトは「出力」フィールドに表示されます。このフィールドは、条件の作成を進めるに従って動的に更新されます。
条件の追加
ポリシー条件エディターを開くと、初期条件が事前に提供され、構成できる状態になっています。
ドロップダウン・リストを使用して、条件の最初に使用する関数を選択します。
API Connectでの JSONata サポート
API Connect は、 JSONata 仕様の v2.0 をサポートしますが、以下の制限があります。
- JSONata 式を使用してフィールドを抽出または編集する場合、フィールドが異なる場所に存在していても、そのフィールドのソフト・リンク・コピーも抽出ポリシーまたは編集ポリシーの影響を受けます。
- API Connect では、上位の JSONata 関数 (他の関数を処理する関数) はサポートされていません。
- API Connect でサポートされる JSONata 関数が上位の関数を引数として呼び出す場合、その引数はサポートされません (上位の関数がサポートされていないため)。
- 以下の JSONata v2.0 関数はサポートされていません。
$eval()
$sift()
$each()
$error()
$assert()
$fromMillis()
は、以下の制限付きでサポートされます。$fromMillis()
パラメータは、-5364662400000~2903299199000の範囲の数値をサポートする。- 5364662400000より小さい値は-5364662400000を使用する。 つまり、タイムスタンプを1800-01-01T00:00:00Zと報告する。
- 2903299199000より大きい値は2903299199000を使用する。 つまり、タイムスタンプを2261-12-31T23:59:59Zと報告する。
$now()
は、以下の制限付きでサポートされます。- 以下のコンポーネント指定子はサポートされていません。
W
= 年内の週w
= 月の週X
= ISO 週番号付け年x
= ISO 週番号付けの月
- 数値を単語として表すことはサポートされていないため、以下の表示修飾子はサポートされていません。
W
= 大文字の単語 (例: [YW] => TWO ,000 AND 24)w
= 小文字の単語 (例: [Yw] => 2、000、24)Ww
= タイトル・ケース・ワード (例: [YWw] => 2 千と 20-4)
- エラー・メッセージは一般的です。
- 以下のコンポーネント指定子はサポートされていません。
表 1 に、標準 JSONata 表記で使用できる機能拡張をリストします。 各拡張は、API コンテキストの部分に対応しています。
内線 | 変数 | 説明 |
---|---|---|
$apiCtx() |
API コンテキストへの汎用アクセス | $apiCtx() 拡張機能は、API コンテキストへの汎用アクセスを提供します。
|
$header(name) |
message.headers.name |
メッセージ・ヘッダー |
$httpVerb() |
request.verb |
要求の HTTP メソッド |
$operationID() |
api.operation.id |
操作の ID |
$operationPath() |
api.operation.path |
操作のパス |
$queryParameter('name') |
|
request.parameters.name.locations 内のquery のインデックスを検索し、request.parameters.name.values[index] を返します。ここで、[index] はロケーション内のquery の値です。 パラメーター値は URL にデコードされません。 |
$statusCode() |
message.status.code |
状況コード |
$storageType([arg]) |
variable.body API コンテキスト内に任意の変数を指定できます。 変数を指定しない場合は、デフォルトの変数 |
メッセージのストレージ・タイプ。 サポートされる値は、 binary 、 empty 、 graphql 、 json 、 stream 、または xml です。 |
$urlParameter('name') |
|
request.parameters.name.locations 内のpath とquery のインデックスを検索し、request.parameters.name.values からのpath とquery の両方の値を含む単一の配列を返します。 URL に path と query の両方のパラメーター値が含まれる場合、
配列に含まれる値の順序は、最初が path、続いて query になります。 各パラメーター・タイプの値は、受け取った順に追加されます。 パラメーター値は URL にデコードされます。例えば、以下の URL には path パラメーターと query パラメーターの両方の値が含まれています。
$urlParameter('breed') URLは、以下の値の配列を返します。
この例では、URLに |
$xpath(path, xpathExpression) |
API コンテキスト内で任意の書き込み可能変数を指定できます。 xpathExpression はリテラル・ストリングでなければなりません。 |
XPath 式の使用を許可します。 以下の例では、ソース内のすべての price 要素が指定されています。
|
表 2 に、 GraphQL API で使用できる機能拡張をリストします。
内線 | 変数 | 説明 |
---|---|---|
$gqlActiveOperation([graphql_message]) |
message.body |
指定されたGraphQLメッセージで検出されたアクティブの操作を取得します。 operationName は、アクティブ操作の名前と同じでなければなりません。 |
$gqlAlias(graphql_field_node) |
message.body |
GraphQLフィールド・ノードの別名を取得します。 |
$gqlFragments([graphql_message]) |
message.body |
指定されたGraphQLメッセージで検出されたフラグメントを取得します。 |
$gqlName([graphql_node]) |
message.body |
ノード名を取得します。 操作の場合、ノード名はoperationName です。 フィールド、フラグメント定義、引数、およびその他のエレメントの場合、ノード名はエレメントの名前です。 デフォルトでは、message.body のoperationName が取得されます。 |
$gqlOperations([graphql_message]) |
message.body |
指定されたGraphQLメッセージで検出された操作を取得します。 |
$gqlType([graphql_node]) |
message.body |
アクティブな操作の操作タイプは、照会、ミューテーション、およびサブスクリプションの各照会タイプについて取得されます。 |
&
(連結) ナビゲーション演算子を使用できます。
以下の JSONata 数値演算子を使用できます。
+
(加算)-
(減算)*
(乗算)- / (除算)
- % (モジュロ)
以下の JSONata 比較演算子は、数値またはストリングに使用できます。
=
!=
<
>
<=
>=
- シーケンスを配列に変換したり、演算子の優先順位を指定したり、コンテキスト値で複合式を計算したりするには、括弧を使用します。
- 配列範囲および述部式。
- 単一アスタリスク(
*
)および二重アスタリスク(**
)のワイルドカードの文字。
query
操作とフラグメントを含むGraphQL照会全体。
operationName
匿名操作の場合、
operationName
は空にすることができます。~fragmentSpreadName
on~typeCondition
- ~~
fragmentDefinitionName
関数を選択すると、選択した関数に応じて追加のフィールドが表示され、条件を指定できるようになります。 例えば、関数 $httpVerb()
を選択すると、比較演算子の選択リスト (=
または !=
) が表示され、式の右側には、選択項目として HTTP verb のリスト (GET
、PUT
、POST
、DELETE
、HEAD
、OPTIONS
、または PATCH
) も表示されます。
NOT を選択すると、条件が $not
関数によって否定されます。
さらに条件を追加するには、「条件の追加」をクリックします。次に、この条件と前の条件の間に and
演算子と or
演算子のどちらを挿入するかを選択します。
複数の条件を括弧で囲んでグループ化するには、「グループの追加」をクリックして、グループに条件を追加します。次に、このグループと前の条件またはグループの間に、and
演算子と or
演算子のどちらを挿入するかを選択します。
独自の条件を最初から作成するには、「カスタム」を選択して、表示されたフィールドにスクリプトを入力します。
例
($statusCode() != 200 and ($httpVerb() = 'GET' or $httpVerb() = 'PUT'))
この場合は、条件エディターで以下のステップを実行します。単純条件ステートメント
以下の例は、単一の関数を使用する条件を示しています。
$httpVerb()
拡張を使用して要求の HTTP メソッドを指定しています。$httpVerb()="GET"
$operationPath()
拡張を使用して操作のパスを指定しています。$operationPath()="/base/path-2"
$operationID()
拡張を使用して操作 ID を指定しています。$operationID()="test-gatewayscript-GET"
$statusCode()
拡張を使用してメッセージ状況コードを指定しています。$statusCode()=200
$header(name)
拡張を使用してメッセージ・ヘッダーのコンテンツ・タイプを指定しています。$header("Content-Type")="application/json"
論理演算子による条件の結合
and
演算子とor
演算子を使用して、複数の関数を単一の条件に結合できます。
test-gatewayscript-GET
と等しいことを指定しています。$httpVerb()="GET" and $operationPath()="test-gatewayscript-GET"
POST
または PUT
要求のいずれかであることを指定しています。$httpVerb()="POST" or $httpVerb()="PUT"
test-gatewayscript_POST
と等しく、かつ、メッセージ状況コードが 200
と等しいか、あるいは、API 操作 ID が test-gatewayscript-GET
と等しく、かつ、メッセージ状況コードが 500
と等しいことを指定しています。($operationID()="test-gatewayscript-POST" and $statusCode()=200) or ($operationID()="test-gatewayscript-GET" and $statusCode()=500)
test-gatewayscript-POST
と等しく、
メッセージ状況コードが 200
と等しく、さらに、API 操作パスが /base/path-2
と等しいことを指定しています。($operationID()="test-gatewayscript-POST" and $statusCode()=200) and $operationPath()="/base/path-2"
text/plain
と等しく、
かつ、メッセージ・ヘッダーの長さが 300
と等しいか、あるいは、メッセージ状況コードが 200
と等しいことを指定しています。($header("Content-Type")="text/plain" and $header("Content-Length")=300) or $statusCode()= 200