Response Transformer
概要
Response Transformerポリシーは、アウトバウンドポリシーであり、クライアントに配信する前に上流サービスから返されたレスポンスを修正します。この変換により、以下が可能になります:
- レスポンスヘッダーやJSONフィールドの追加、削除、置換、名前変更、または追加。
- レスポンスボディのフィルタリングまたは再構成。
- 機密フィールドのマスキングまたは変換。
- 異なるサービス間でのレスポンスペイロードの一貫性の確保。
これは、内部の実装詳細を隠したり、APIレスポンスを外部クライアント契約に合わせたりする場合に特に便利です。
注記
このプラグインはDBレスモードと互換性があり、grpc、grpcs、http、およびhttpsプロトコルをサポートしています。
設定の詳細
設定は、変換操作を宣言するためのシンプルなキーと値の形式を使用します。各操作は特定の名前空間の下で定義され、ヘッダーとJSONボディフィールドの両方をサポートします。
変換の順序
変換は以下の順序で実行されます:
- 削除
- 名前変更
- 置換
- 追加
- 追加
サポートされている変換フィールド
Field | Description |
---|---|
remove | 特定のレスポンスヘッダーまたはJSONキーを削除 |
rename | 既存のレスポンスヘッダーまたはJSONキーの名前を変更 |
replace | 既存のレスポンスヘッダーまたはJSONキーの値を置換 |
add | 新しいレスポンスヘッダーまたはJSONフィールドを追加(既存のフィールドがある場合は置換) |
append | 既存のヘッダーやJSON配列に追加の値を追加 |
主要な設定オプション
Field | Description |
---|---|
config.add.headers | 新しいレスポンスヘッダーを追加します。形式:header-name:value |
config.add.json | レスポンスボディに新しいJSONキーを追加します。フォーマット: key:value |
config.add.json_types | addまたはappendを使用する際にJSON値のタイプ(文字列、ブール値、数値)を明示的に設定します。 |
config.append.headers | 既存のヘッダーに値を追加します。フォーマット: header-name:value |
config.append.json | 既存のJSONキーに値を追加します。 |
config.remove.headers | 既存のレスポンスヘッダーを削除します。フォーマット: header-name |
config.remove.json | レスポンスから特定のJSONキーを削除します。 |
config.rename.headers | ヘッダーの名前を変更します。フォーマット: old-name:new-name |
config.rename.json | JSONキーの名前を変更します。フォーマット: old-key:new-key |
config.replace.headers | ヘッダーの値を置き換えます。フォーマット: header-name:new-value |
config.replace.json | JSONキーの値を置き換えます。フォーマット: key:new-value |
config.replace.json_types | 非文字列タイプ(ブール値、数値)でJSON値を置き換える際に必要です。 |
例
基本的な例 - ヘッダーとJSONキーを追加する
curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--header "Content-Type: application/json" \
--data '{
"name": "response-transformer",
"config": {
"add": {
"headers": ["x-new-header:value", "x-another-header:something"],
"json": ["new-json-key:some_value", "another-json-key:some_value"],
"json_types": ["string", "boolean", "number"]
}
}
}'
ヘッダーを追加し、JSONフィールドを削除する
curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--header "Content-Type: application/json" \
--data '{
"name": "response-transformer",
"config": {
"append": {
"headers": ["x-header-1:v2", "x-header-2:v1"]
},
"remove": {
"json": ["internal-field"]
}
}
}'
JSONキーとヘッダーの名前を変更する
curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--data "name=response-transformer" \
--data "config.rename.headers=old-header:new-header" \
--data "config.rename.json=old-key:new-key"
複数のアクションを伴う完全な例
curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--header "Content-Type: application/json" \
--data '{
"name": "response-transformer",
"config": {
"remove": {
"headers": ["x-toremove", "x-another-one"],
"json": ["json-key-toremove", "another-json-key"]
},
"add": {
"headers": ["x-new-header:value"],
"json": ["new-json-key:some_value"],
"json_types": ["string"]
},
"append": {
"headers": ["x-existing-header:some_value", "x-another-header:some_value"]
}
}
}'
追加の注意事項
- 値にカンマ (,) が含まれている場合、配列表記を使用する必要があります(例:JSON配列)。
- このプラグインは、変換中にレスポンスボディ全体をメモリに保持するため、大きなレスポンスではパフォーマンスに影響を与える可能性があります。
- gzip圧縮されたペイロードを変換する際は、Content-Encoding: gzip ヘッダーが適切に処理されることを確認してください。
- このプラグインは、Nginxによって書き込まれた x-forwarded-* ヘッダーを変更しません。
- JSONキーの値の型 (json_types) は、数値またはブールフィールドを追加または付加する際に重要です。
ポリシーの使用に関する詳細な指示や高度な例については、次のガイドを参照してください: Response Transformer - Plugin | Kong Docs