構文解析

「解析」 ポリシーを使用して、入力文書の構文解析を制御します。 入力文書が JSON ストリングである場合に、そのストリングが、上書きコピーされるのではなく構文解析されます。

表 1. このポリシーをサポートするゲートウェイと、対応するポリシーのバージョンを示す表
ゲートウェイ ポリシーのバージョン
DataPower® API Gateway 2.0.0

2.1.0 (DataPower API Gateway バージョン 10.0.3.0 以降)

2.2.0 (DataPower API Gateway バージョン 10.5.0.5 以降)

このトピックでは、アセンブリー・ユーザー・インターフェースでのポリシーの構成方法について説明します。 OpenAPI ソースでのポリシーの構成方法について詳しくは、 parseを参照してください。

解析 について

構文解析ポリシーを使用すると、以下の方法を優先順位の高い順に使用して、構文解析設定を取得できます。
  1. デフォルトの解析設定にするプロパティーの取得元にする有効な解析設定構成を指定します。
    注: デフォルト名を変更する場合は、対応する ParseSettings オブジェクトを DataPower API Gatewayで個別に構成する必要があります。
  2. 解析設定としてシリアライズされた XML または JSON プロパティーとしてリテラル・ストリングを指定します。 これらのプロパティーは、既存のデフォルト・プロパティーより優先されます。 リテラル・ストリングは、XML または JSON 形式でなければなりません。
    • XML 形式は "<ParseSettings><propertyName>propertyValue</propertyName></ParseSettings>" です。
    • JSON 形式は "{ \"ParseSettings\" : { \"propertyName\" : propertyValue } }" です。
  3. 解析設定としてシリアライズされた XML プロパティーまたは JSON プロパティーの取得元となる、名前付きコンテキストを表す URL。 これらのプロパティーは、既存のリテラルまたはデフォルト・プロパティーより優先されます。

プロパティー

以下の表に、このポリシーのプロパティーをリストします。表には、プロパティーが必須かどうか、入力用の有効な値とデフォルト値、および値のデータ型が示されています。

表 2. 解析 ポリシーのプロパティー
プロパティー・ラベル 必須 説明 データ・タイプ
タイトル いいえ ポリシーのタイトル。

デフォルト値は parseです。

ストリング
説明 いいえ ポリシーの説明。 ストリング
コンテンツ・タイプを使用 いいえ この設定が有効になっていて、文書タイプを検出するように解析設定が構成されている場合、解析操作は、要求ヘッダー内に指定されている Content-Type を使用します。

この設定が有効になっていて、解析設定の文書タイプが JSON または XML 用に構成されている場合、解析操作は、要求ヘッダー内に指定されている Content-Type を使用します。要求ヘッダー内の Content-Type が解析設定と一致していない場合、解析操作は失敗します。

この設定の有効化が適用されるのは、予期される Content-Type が JSON または XML の場合のみです。

この設定が有効になっていない場合、解析操作は、解析設定で指定されている文書タイプ、または検出された文書タイプ (文書タイプを検出するように解析設定が構成されている場合) を使用します。

このチェック・ボックスは、デフォルトでクリアされています。

ブール値
解析設定オブジェクト参照 いいえ 動的オブジェクトのデフォルトのプロパティー値の取得元となる、既存の有効なオブジェクト。 ストリング
文書タイプ いいえ 解析する文書のタイプ。 次のオプションのいずれかを選択します:
  • Detect: 文書タイプが検出され、それに応じてペイロードが解析されます。 このタイプはデフォルト・オプションです。
  • JSON: ペイロードは JSON として解析されます。
  • XML: ペイロードが XML として解析されます。
  • Graphql: 以下のいずれかの方法で解析が実行されます。
    • POST 要求の本文で GraphQL として。 GraphQL の形式は次のとおりです。
      {
        me {
          name
        }
      }
    • GraphQL 照会を含む POST 要求の本文内の JSON ストリングとして。 JSON オブジェクトの形式は次のとおりです。
      {
        "query": "query MyData ($idVar: Int!) { user (id: $idVar) { name }}",
        "operationName": "MyData",
        "variables": {"idVar": 123}
      }
    • GET 要求の URL 照会によって。 URL の形式は次のとおりです。
      https://myapi/graphql?query={me{name}}
      次の例では、 variablesoperationName のプロパティを URL エンコーディングで含めています(改行はテーブルのフォーマットのみに使用され、値には改行は含まれません)
      https://hostname/basepath/graphql?query=query%20fetchAccounts
      %20($limit:%20Int)%20{accounts(limit:%20$limit)%20{name{first,last}}}
      &variables={"limit":100}&operationName=fetchAccounts
      注: Invokeポリシーで Bufferingが選択されている場合、ドキュメントタイプが検出され、それに応じてペイロードが解析されます。 詳しくは、 DataPower API Gateway の呼び出しポリシーの構成』 および DataPower Gateway ( v5 互換) の呼び出しポリシーの構成』を参照してください。

GET 要求内の照会変数は、variables という照会パラメーターで JSON ストリングとして送信できます。 照会に複数の名前付きの操作が含まれている場合、実行する操作を決定するために、operationName照会パラメーターが必要です。

ストリング
最大文書サイズ いいえ 構文解析操作が受け入れる JSON、XML、または GraphQL の入力文書の、最大文書サイズ (バイト) (オプション)。 この設定により、最大文書サイズを適用することで脅威を防ぐことができます。 値は、0 から 5368709121 の範囲で入力します。 文書のサイズが最大サイズを超えていると、その文書は拒否されます。 値が 0 の場合、文書サイズの制限はありません。 0 に設定した場合、操作の結果で文書サイズは返されません。

デフォルト値は 4194304 です。

整数
最大ネスティング深さ いいえ (オプション) 解析操作で受け入れられる XML、JSON、または GraphQL メッセージのネストの最大の深さです。 この設定により、メッセージに制限を適用することで脅威を防ぐことができます。
  • XML の場合、要素の深さの最大レベルです。
  • JSON の場合、ネストされるラベルと値のペアの最大レベル、ネストされる配列の最大数、またはラベル/値のペアと配列との組み合わせの最大数です。
  • GraphQL の場合、ネストされる選択セットの最大レベルです。

0 から 4096 の範囲の値を入力します。 最大深度を超えるネストが含まれている文書は拒否されます。 値が 0 の場合、ネストの深さの制限はありません。 0 に設定した場合、操作の結果ではネストの深さが返されません。

デフォルト値は 512 です。

整数
最大幅 いいえ (オプション) 解析操作で受け入れられるペイロードの最大幅です。
  • 入力文書が XML である場合、このプロパティーは、エレメントの属性の最大数、またはエレメントの子エレメントの最大数を指定します。
  • 入力文書が JSON である場合、このプロパティーは、JSON オブジェクト上のプロパティーの最大数、または JSON配列内の JSON 項目の最大数を指定します。
  • 入力文書が GraphQL である場合、このプロパティーは、選択セット内の選択の最大数を指定します。

値は、0 から 65535 の範囲で入力してください。 最大幅を超える幅の文書は拒否されます。 値が 0 の場合、幅の制限はありません。 0 に設定した場合、操作の結果では文書の幅は返されません。

デフォルト値は 4096 です。

整数
名前の最大長 いいえ (オプション) 解析操作で受け入れられる文書内の名前の最大長 (バイト数) です。
  • XML の場合、タグの名前部分の長さです。
  • JSON の場合、JSON ラベル/値ペアのラベル部分の長さです。
  • GraphQL の場合、ID (フィールド名とディレクティブ名を含む) の最大長です。

長さには、XML の場合はタグの間、JSON の場合は引用符間にある空白文字が含まれます。 値は、0 から 8192 の範囲で入力します。 名前の長さが最大長を超えると、文書は拒否されます。 値が 0 の場合、名前の長さの制限はありません。 0 に設定した場合、操作の結果では文書の名前長が返されません。

デフォルト値は 256 です。

整数
値の最大長 いいえ (オプション) 解析操作で受け入れられる文書内の値の最大長 (バイト数) です。
  • XML の場合、属性の長さまたはテキスト値の長さです。
  • JSON および GraphQL の場合、ストリング値の長さです。

長さには、XML の場合はタグの間、JSON の場合は引用符間にある空白文字が含まれます。 値は、0 から 5368709121 の範囲で入力します。 値の長さが最大長を超えると、文書は拒否されます。 値が 0 の場合、値の長さの制限はありません。 0 に設定した場合、操作の結果では文書の値の長さが返されません。

デフォルト値は 8192 です。

整数
固有の名前の最大数 いいえ (オプション) 解析操作で受け入れられる JSON 文書または XML 文書内の固有名の最大数です。
  • XML の場合、固有の XML ローカル名の数です。
  • JSON の場合、固有の JSON ラベルの数です。

0 から 1048575 の範囲の値を入力します。 文書内の固有名の数が最大数を超えると、文書は拒否されます。 値が 0 の場合、固有名の数の制限はありません。 0 に設定した場合、操作の結果では文書内の固有名の数が返されません。

デフォルト値は 1024 です。

整数
固有の接頭部の最大数 いいえ (オプション) 解析操作で受け入れられる、文書内の固有の XML 名前空間接頭部の最大数です。 この制限では、同じ名前空間に定義された複数の接頭部をカウントしますが、単一の接頭部の下で入力文書の別個の部分に定義された複数の名前空間はカウントしません。 0 から 262143 の範囲の値を入力します。 文書内の固有接頭部の数が最大数を超えると、文書は拒否されます。 値が 0 の場合、固有接頭部の数の制限はありません。 0 に設定した場合、操作の結果では文書内の固有接頭部の数が返されません。

デフォルト値は 1024 です。

整数
固有名前空間の最大数 いいえ (オプション) 解析操作で受け入れられる固有の XML 名前空間 URI の最大数です。 この制限では、すべての XML 名前空間を (その名前空間を宣言するために使用された接頭部の数を問わず) カウントします。 値は、0 から 65535 の範囲で入力してください。 文書中の固有名前空間の数が最大数を超えると、文書は拒否されます。 値が 0 の場合、固有名前空間の数の制限はありません。 0 に設定した場合、操作の結果では文書内の固有名前空間の数が返されません。

デフォルト値は 1024 です。

整数
数値最大長 いいえ (オプション) JSON のラベル/値のペアの値部分の最大バイト数です (その値が数値の場合)。 数値は、空白文字を含まない連続バイト・ストリングでなければなりません。 負符号、および正または負の指数を数値に含めることができます。 0 から 256 の範囲の値を入力してください。 文書中の数値の長さが最大長を超えると、文書は拒否されます。 値が 0 の場合、数値の長さの制限はありません。 0 に設定した場合、操作の結果では文書内の数値の長さが返されません。

デフォルト値は 128 です。

整数
解析設定リテラル構成 いいえ 動的オブジェクトにマージされている、シリアル化された XML または JSON プロパティーを表すリテラル・ストリング。 これらのプロパティーは、既存のデフォルトのプロパティーより優先されます。 ストリング
解析設定 URL 参照 いいえ 動的オブジェクトにマージされている、シリアル化された XML または JSON プロパティーの取得元となる名前付きコンテキストを表す URL。 これらのプロパティーは、既存のリテラルまたはデフォルトのプロパティーよりも優先されます。 ストリング
解析用のメッセージ いいえ API コンテキストでの変数の名前。 変数の body フィールドの内容が、ポリシーへの入力になります。 デフォルトの変数名はmessageです。 ストリング
結果の解析済みデータ用のメッセージ いいえ API コンテキストでの変数の名前。 この変数の body フィールドの内容が、parse 操作の出力です。 構文解析された文書の構文解析メトリックを、メッセージの別の部分に格納することができます。 デフォルトの変数名は入力名と同じであるため、デフォルトでは入力メッセージが出力メッセージで上書きされます。 ストリング

YAML ソースを使用して、以下のオプションを設定します。

プロパティー 必須 説明 データ・タイプ
strict-utf8-encoding いいえ JSON 文書の場合、文書全体にわたって厳密な UTF-8 エンコードを適用するかどうか。
  • onの場合、文書全体で有効な UTF-8 エンコードが検査されます。
  • offの場合、最初の数バイトのみが適切なエンコードであるかどうかが検査されます。 文書の残りの部分は、同じエンコード方式であると想定されます。

デフォルト値は offです。

ブール値
例については、 parseを参照してください。
解析ポリシーの制限
  • 構文解析ポリシーの literal プロパティは、変数やコンテキスト・パラメータをサポートしていません。 固定文字列でなければならない。