メッセージの作成、アクセス、変換

Apigee Edge に含まれているポリシーを使用すると、API プロキシを流れるメッセージを操作できます。ポリシーを使用すると、次のことができます。

  • XML から JSON など、フォーマット間でメッセージを変換します。
  • メッセージのコンテンツから変数値を設定し、変数値からメッセージを作成します。
  • JavaScript、Java、Python などの手続き型コードを使用し、複雑な方法でメッセージやデータを処理します。

一般に、こうしたポリシーを使用する場合は、入出力変数をフロー変数として指定します。Apigee Edge は実行時にソース変数から入力値を取得し、その出力値を出力変数に書き込みます。

このトピックでは、こうした機能について説明します。技術的な詳細については、それぞれのポリシーのリファレンスをご覧ください。

XML と JSON の簡単な処理

Apigee Edge には、XML と JSON 間の変換と XSL を使用した XML の変換を容易にするポリシーが含まれています。

JSON から XML への変換

JSON to XML ポリシーは、JSON 入力を取得し、XML に変換します。

次のポリシー例では、ポリシーは request 変数から JSON 形式のメッセージを受け取り、変数値を XML 形式のメッセージに変換します。入力は <Source> 要素で指定されますが、出力は <OutputVariable> 要素で指定されます。

    <JSONToXML name="jsontoxml">
         <Source>request</Source>
         <OutputVariable>request</OutputVariable>
    </JSONToXML>
    

XML から JSON への変換

XML to JSON ポリシーは、XML 入力メッセージを JSON に変換します。

次のポリシー例では、ポリシーは response 変数から XML 形式のメッセージを受け取り、変数値を JSON 形式のメッセージに変換します。入力は <Source> 要素で指定されますが、出力は <OutputVariable> 要素で指定されます。

    <XMLToJSON name="ConvertToJSON">
       <OutputVariable>response</OutputVariable>
       <Source>response</Source>
    </XMLToJSON>
    

XSL を使用した XML の変換

XSL 変換ポリシーを使うと、XSL を使用したメッセージを変換できます。たとえば、JSON ペイロードを XML に変換した後、スタイルシートを使用した XSL 変換ポリシーを使い、必要な変換を行えます。

次のポリシー例では、ポリシーは response 変数から XML 形式のメッセージを受け取り、変数値を my_transform.xsl でフォーマットしたメッセージに変換します。入力は <Source> 要素で指定されますが、出力は <OutputVariable> 要素で指定されます。

    <XSL name="TransformXML">
        <ResourceURL>xsl://my_transform.xsl</ResourceURL>
        <Source>response</Source>
        <OutputVariable>response</OutputVariable>
    </XSL>

        <Source>request</Source>
        <ResourceURL>xsl://XSL-Transform-1.xsl</ResourceURL>
        <OutputVariable/>
    

変数データの処理

プロキシ内のデータ処理では、状態データがただフロー変数値として扱われることがよくあります。多くの場合、この処理には、変数値を取得または設定するポリシーを使用します。たとえば、変数値からメッセージを作成したり、メッセージのコンテンツを抽出して変数値を設定したりできます。

次の 2 つのポリシーのリファレンスを確認してください。

複雑な変換の作成

含まれているポリシーの機能では対処できない複雑なデータを処理する場合は、JavaScript、Java、Python などの手続き型言語を使用できます。

通常、こうした言語のいずれかでコードを記述し、その言語に固有のポリシーからコードを呼び出します。詳細については、プロシージャル コードの組み込みをご覧ください。