Chuyển tới nội dung chính

Request Transformer

Tổng Quan

Chính sách Request Transformer là một chính sách đầu vào, cho phép sửa đổi động các yêu cầu HTTP đến trước khi chúng được chuyển tiếp đến các dịch vụ phía trên. Điều này bao gồm khả năng:

  • Xóa hoặc thêm tiêu đề, chuỗi truy vấn và tham số trong thân.
  • Đổi tên hoặc thay thế các trường yêu cầu cụ thể.
  • Áp dụng logic chuyển đổi bằng cách sử dụng mẫu hoặc giá trị tĩnh.

Điều này hữu ích trong các tình huống như điều chỉnh API cho các hệ thống kế thừa, thêm hoặc che giấu thông tin nhạy cảm, hoặc hỗ trợ các hợp đồng API đang phát triển.

Kong Gateway xử lý các chuyển đổi yêu cầu theo thứ tự sau:

  1. Xóa
  2. Đổi tên
  3. Thay thế
  4. Thêm
  5. Ghi thêm

Chi Tiết Cấu Hình

Giao diện người dùng cung cấp các đầu vào cấu hình động. Bạn có thể thêm nhiều dòng chuyển đổi bằng cách nhấp vào biểu tượng cộng màu xanh lá cây.

Các Loại Chuyển Đổi Hỗ Trợ

Field Format Description
config.remove.headersx-remove-headerXóa các tiêu đề đã chỉ định.
config.remove.querystringparam1,param2Xóa các tham số truy vấn cụ thể.
config.remove.bodyparam1,param2Xóa các trường biểu mẫu cụ thể.
config.rename.headersold:newĐổi tên một tiêu đề.
config.rename.querystringold:newĐổi tên một tham số truy vấn.
config.rename.bodyold:newĐổi tên một trường trong thân.
config.replace.headerskey:valueThay thế giá trị tiêu đề.
config.replace.querystringkey:valueThay thế giá trị tham số truy vấn.
config.replace.bodykey:valueThay thế giá trị trường trong thân.
config.add.headerskey:valueThêm một tiêu đề mới.
config.add.querystringkey:valueThêm một tham số truy vấn mới.
config.add.bodykey:valueThêm một trường biểu mẫu mới.
config.append.headerskey:valueThêm vào các giá trị tiêu đề hiện có.
config.append.querystringkey:valueThêm vào các giá trị tham số truy vấn hiện có.
config.append.bodykey:valueThêm vào các giá trị tham số body hiện có.
  • Nếu giá trị của một trường chứa dấu phẩy, hãy sử dụng cú pháp mảng thay vì chuỗi phân tách bằng dấu phẩy.
ví dụ, headers[1]=h1:v1
  • Các tiêu đề x-forwarded-* (được thêm bởi Nginx) không thể được sửa đổi bằng plugin này.
  • Đối với tất cả các loại cấu hình, các mục danh sách phải tuân theo định dạng "key:value" hoặc "old:new" cho việc đổi tên.

Mẫu

Bạn có thể sử dụng các mẫu để tiêm động các giá trị từ yêu cầu đến:

Tiêu đề:

${headers.<header_name>}

Truy vấn:

${query_params.<param_name>}

Bắt URI:

${uri_captures.<group_name>}

Chia sẻ:

${shared.<variable_name>}

Bạn thậm chí có thể sử dụng các biểu thức Lua bên trong các mẫu như:

Authorization:$(function()
local value = headers.Authorization
if not value then return end
if value:sub(1,6) == "Basic " then return value end
return "Basic " .. value
end())

Ví dụ

Chuyển đổi yêu cầu cơ bản

Chuyển đổi một yêu cầu đến bằng cách xóa một tiêu đề, đổi tên một trường body và thêm một tham số truy vấn:

{
"name": "request-transformer",
"config": {
"remove": {
"headers": ["x-remove-header"],
"body": ["formparam-toremove"],
"querystring": ["qs-toremove"]
},
"rename": {
"body": ["param-old:param-new"]
},
"add": {
"querystring": ["new-param:some_value"],
"headers": ["x-new-header:some_value"]
}
}
}

Kích hoạt qua Kong Admin API

curl -X POST [http://localhost:8001/services/{serviceName}/plugins](http://localhost:8001/services/%7BserviceName%7D/plugins) \
--data "name=request-transformer" \
--data "config.add.body=new-field:defaultvalue"

Thêm và Xóa trong Một Yêu Cầu

curl -X POST [http://localhost:8001/services/example-service/plugins](http://localhost:8001/services/example-service/plugins) \
--data "name=request-transformer" \
--data "config.append.headers=h1:v2,h2:v1" \
--data "config.remove.body=p1"

Sử dụng Mẫu Bắt URI

--data "config.add.headers=x-user-id:${uri_captures['user_id']}"

Nhiều Tiêu Đề (dưới dạng mảng)

--data "config.add.headers[1]=h1:v1" \
--data "config.add.headers[2]=h2:v1"

Plugin này rất linh hoạt và đóng vai trò quan trọng trong việc cầu nối sự khác biệt giữa mong đợi của khách hàng và các thông số kỹ thuật API phía trên.

Để biết thêm hướng dẫn và ví dụ nâng cao về việc sử dụng chính sách, vui lòng tham khảo hướng dẫn này: Request Transformer - Plugin | Kong Docs