分析サブシステムに送信する前に、ゲートウェイ上の API イベント・レコードをカスタマイズします。
開始前に
API Manager UI、および API 定義の操作に精通していることを確認してください。注: GatewayScriptポリシーは、'
Premium subscription でのみ使用可能です。
Premium subscription詳細とアップグレード方法については、'
よくある質問プレミアム購読を参照のこと。
このタスクについて
API 実行中に、アクティビティー・データは log
コンテキスト変数に保管されます。このコンテキスト変数は、API 実行の完了時に API イベント・レコードにデータを取り込みます。 log
コンテキスト変数について詳しくは、 API アクティビティー・ロギングのコンテキスト変数を参照してください。
分析サブシステムは、分析データを個別の API イベント・レコードとして保管します。 API イベント・レコードのフィールドについては、 API イベント・レコードのフィールド・リファレンスを参照してください。 特定の API の API イベント・レコードをカスタマイズすることができます。 ゲートウェイ・スクリプトまたは set-variable
操作を使用して、既存の API イベント・フィールドの内容を変更したり、新規カスタム・フィールドを追加したりすることができます。
手順
- API Manager UI で、 「API および製品の開発 (Develop APIs and products)」 タイルをクリックし、 「API」 タブを選択し、 「追加」をクリックし、 「API」を選択します。
- 選択する新しいオープンAPI 、APIにタイトルを付ける
こんにちは世界
をクリックし、次。 「次へ」をもう一度クリックしてセキュリティーのデフォルトを受け入れ、 「API の編集」をクリックします。
- YAML ソース・ビューを選択します
。 生成された 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: []
- 「フォーム」 アイコン
をクリックして 「フォーム」 ビューに切り替え、 「ゲートウェイ」 タブを選択します。
- 「ポリシー」 が選択されていることを確認します。
- キャンバスで、フローの最後の位置にあるプラス・アイコン
をクリックします。 アセンブリー・フローを作成するために使用可能な要素がリストされたパレットが表示されます。
- パレットで、 「ログ」 ポリシー・エレメントをクリックしてキャンバスに追加します。 ログ・ポリシーの 「モード」 ドロップダウンを 「収集のみ」に設定します。 このステップは、次のステップで使用するために、
log
コンテキスト変数にデータが取り込まれるようにするためのものです。
- ゲートウェイ・スクリプトを使用するか、変数設定操作を使用して、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);
}
この例では、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
型を文字列として定義し、それに代入するすべてのものが、代入される前に文字列に変換されるようにします。
-
Hello World
API をカタログに公開します。
- API に対してテスト呼び出しを行い、新規カスタム・データが設定されていることを確認します。
- 「分析」ビューで 「ディスカバー」 を選択し、テスト呼び出しに対応する API イベント・レコードをクリックします。
- ページをスクロールダウンして、API イベント・レコード・ペイロードを表示します。 カスタム・データ・フィールドが存在することを確認します。

- フィルターを使用して、新しいカスタム・フィールドが設定されている分析データのみを表示できます。
- REST API 呼び出しで新規データを使用するには、以下のように custom_data 照会パラメーターを使用します。
/cloud/events?custom_data[newAPIEventDataField]=newData