ゲートウェイ・スクリプトまたは変数設定操作を使用したデータのカスタマイズ

分析サブシステムに送信する前に、ゲートウェイ上の API イベント・レコードをカスタマイズします。

開始前に

API Manager UI、および API 定義の操作に精通していることを確認してください。
注: GatewayScriptポリシーは、'Premium subscription でのみ使用可能です。 Premium subscription詳細とアップグレード方法については、'よくある質問プレミアム購読を参照のこと。

このタスクについて

API 実行中に、アクティビティー・データは log コンテキスト変数に保管されます。このコンテキスト変数は、API 実行の完了時に API イベント・レコードにデータを取り込みます。 log コンテキスト変数について詳しくは、 API アクティビティー・ロギングのコンテキスト変数を参照してください。

分析サブシステムは、分析データを個別の API イベント・レコードとして保管します。 API イベント・レコードのフィールドについては、 API イベント・レコードのフィールド・リファレンスを参照してください。 特定の API の API イベント・レコードをカスタマイズすることができます。 ゲートウェイ・スクリプトまたは set-variable 操作を使用して、既存の API イベント・フィールドの内容を変更したり、新規カスタム・フィールドを追加したりすることができます。

手順

  1. API Manager UI で、 「API および製品の開発 (Develop APIs and products)」 タイルをクリックし、 「API」 タブを選択し、 「追加」をクリックし、 「API」を選択します。
  2. 選択する新しいオープンAPI 、APIにタイトルを付けるこんにちは世界をクリックし、。 「次へ」をもう一度クリックしてセキュリティーのデフォルトを受け入れ、 「API の編集」をクリックします。
  3. YAML ソース・ビューを選択します OpenAPI ソース・アイコン。 生成された YAML を以下の YAML に置き換え、 「保存」をクリックします。
    swagger: '2.0'
    info:
      title: Hello World
      x-ibm-name: hello-world-rest
      version: 1.0.0
    schemes:
      - https
    basePath: /hello-world
    securityDefinitions:
      clientID:
        type: apiKey
        in: header
        name: X-IBM-Client-Id
    
    x-ibm-configuration:
      phase: realized
      testable: true
      enforced: true
      properties:
        target-url:
          value: http://example.com/operation-name
          description: The URL of the target service
          encoded: false
      cors:
        enabled: true
      activity-log:
        enabled: true
        error-content: header
        success-content: activity
      application-authentication:
        certificate: false
      assembly:
        execute:
          - map:
              version: 2.0.0
              title: map
              inputs:
                name:
                  schema:
                    type: string
                  variable: request.parameters.name
              outputs:
                response:
                  schema:
                    $ref: '#/definitions/Result'
                  variable: message.body
              actions:
                - set: response.hello
                  from: name
                  value: '''Hello '' +$(name)'     
        catch: []
        finally: []
      gateway: datapower-api-gateway
      categories:
        - /tests
      type: rest
    definitions:
      Result:
        type: object
        additionalProperties: false
        properties:
          hello:
            type: string
    paths:
      /hello:
        get:
          parameters:
            - name: name
              in: query
              required: false
              type: string
          responses:
            '200':
              description: OK Response
              schema:
                $ref: '#/definitions/Result'
        parameters: []
    
  4. 「フォーム」 アイコン フォーム・アイコン をクリックして 「フォーム」 ビューに切り替え、 「ゲートウェイ」 タブを選択します。
  5. 「ポリシー」 が選択されていることを確認します。
  6. キャンバスで、フローの最後の位置にあるプラス・アイコン 円の中の正符号 をクリックします。 アセンブリー・フローを作成するために使用可能な要素がリストされたパレットが表示されます。
  7. パレットで、 「ログ」 ポリシー・エレメントをクリックしてキャンバスに追加します。 ログ・ポリシーの 「モード」 ドロップダウンを 「収集のみ」に設定します。 このステップは、次のステップで使用するために、 log コンテキスト変数にデータが取り込まれるようにするためのものです。
    右側にログ・ポリシーのプロパティー・シートが表示されている「ポリシー」ページ
  8. ゲートウェイ・スクリプトを使用するか、変数設定操作を使用して、API イベント・データを変更するか、カスタム・データを追加します。
    ゲートウェイ・スクリプト・メソッド
    ゲートウェイ・スクリプト・ポリシーをアセンブリー・フローに追加し、以下のスクリプト・コードを貼り付けます。
    var logs = context.get('log');
      if (logs) {
        if (!logs.custom_data) {  
          logs.custom_data = {};
        }
        logs.custom_data.newAPIEventDataField = 'newData';
        logs.product_title = 'newProductTitle';
        context.set('log', logs);
      }
    右側に GatewayScript 要素のプロパティー・シートが表示されている「ポリシー」ページ この例では、API イベント・レコードに追加される新規フィールドは newAPIEventDataField と呼ばれ、その値は newDataに設定されます。 既存のフィールド product_title の値が newProductTitleに変更されます。
    Set-variable メソッド
    ゲートウェイ・スクリプトを使用できない場合、または使用したくない場合は、代わりに set-variable ポリシーを使用できます。 アセンブリー・フローに set-variable ポリシーを追加し、次のように設定します。 右側に「変数の設定」要素のプロパティー・シートが表示されている「ポリシー」ページこの例では、API イベント・レコードに追加される新規フィールドは newAPIEventDataField と呼ばれ、その値は newData に設定されます。
    set-variable の YAML コードは以下のとおりです。
          - set-variable:
              version: 2.0.0
              title: set-variable
              actions:
                - set: log.custom_data.newAPIEventDataField
                  value: newData
                  type: string
                - set: log.product_title
                  value: newProductTitle
                  type: string
    警告: context.log.custom_data は文字列や整数などのプリミティブ型の値の追加をサポートしています。 context.log.custom_data オブジェクトにのみデータを追加します。 context.logにデータを追加しないでください。

    フィールドタイプは変更できない。 フィールドに誤った型の値を割り当てようとすると、そのイベント記録は失われる。 例えば、カスタムフィールドを整数として定義し、特定のAPIコールの結果、この変数に文字列が割り当てられた場合、アナリティクスデータベースはそのAPIコールのイベントレコードを保存しません。 APIが異なる型を返す可能性がある場合は、新しいcustom_data型を文字列として定義し、それに代入するすべてのものが、代入される前に文字列に変換されるようにします。

  9. Hello World API をカタログに公開します。
  10. API に対してテスト呼び出しを行い、新規カスタム・データが設定されていることを確認します。
    1. 「分析」ビューで 「ディスカバー」 を選択し、テスト呼び出しに対応する API イベント・レコードをクリックします。
    2. ページをスクロールダウンして、API イベント・レコード・ペイロードを表示します。 カスタム・データ・フィールドが存在することを確認します。API イベント・レコード・ペイロードのカスタム・データ・フィールド
  11. フィルターを使用して、新しいカスタム・フィールドが設定されている分析データのみを表示できます。
    分析データ・フィルター
  12. REST API 呼び出しで新規データを使用するには、以下のように custom_data 照会パラメーターを使用します。
     /cloud/events?custom_data[newAPIEventDataField]=newData