Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Nội dung
Chính sách AttributionMessage sẽ thay đổi hoặc tạo các thông báo yêu cầu và phản hồi mới trong Luồng proxy API. Chính sách này cho phép bạn thực hiện những thao tác sau đối với những thư đó:
- Thêm thông số biểu mẫu, tiêu đề hoặc tham số truy vấn mới vào thư
- Sao chép các thuộc tính hiện có từ thông báo này sang thông báo khác
- Xoá tiêu đề, tham số truy vấn, tham số biểu mẫu và/hoặc thông báo các gói dữ liệu từ một tin nhắn
- Đặt giá trị của các tài sản hiện có trong một thông báo
Với chính sách AttributionMessage, bạn thường thêm, thay đổi hoặc xoá các thuộc tính của yêu cầu hoặc phản hồi. Tuy nhiên, bạn cũng có thể sử dụng chính sách AttributionMessage để tạo một yêu cầu/phản hồi và chuyển thông báo này đến một mục tiêu thay thế, như được mô tả trong Tạo thông báo theo yêu cầu tuỳ chỉnh.
Chính sách AttributionMessage có thể tạo hoặc thay đổi các biến luồng với phần tử con sau đây phần tử:
<AssignMessage>
phần tử
Xác định chính sách AttributionMessage.
Giá trị mặc định | Xem tab Chính sách mặc định bên dưới |
Bắt buộc? | Bắt buộc |
Loại | Đối tượng phức tạp |
Phần tử mẹ | không áp dụng |
Phần tử con |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
Phần tử <AssignMessage>
sử dụng cú pháp sau:
Cú pháp
Phần tử <AssignMessage>
sử dụng cú pháp sau:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Chính sách mặc định
Ví dụ sau đây cho thấy các chế độ cài đặt mặc định khi bạn thêm một chính sách AttributionMessage vào quy trình của bạn trong giao diện người dùng Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Khi bạn chèn chính sách AttributionMessage mới trong giao diện người dùng Edge, mẫu này sẽ chứa các mã giả lập cho tất cả
các thao tác có thể thực hiện. Thông thường, bạn chọn(các) thao tác mình muốn thực hiện bằng chính sách này
và xoá các phần tử con còn lại. Ví dụ: nếu bạn muốn thực hiện thao tác sao chép, hãy sử dụng
phần tử <Copy>
và xoá <Add>
, <Remove>
và các phần tử con khác khỏi phần tử
cho dễ đọc hơn.
Phần tử này có các thuộc tính chung cho tất cả các chính sách:
Thuộc tính | Mặc định | Bắt buộc? | Nội dung mô tả |
---|---|---|---|
name |
Không áp dụng | Bắt buộc |
Tên nội bộ của chính sách. Giá trị của thuộc tính Nếu muốn, hãy sử dụng phần tử |
continueOnError |
sai | Không bắt buộc | Đặt thành "false" để trả về lỗi khi một chính sách không thành công. Đây là hành vi dự kiến đối với hầu hết các chính sách. Đặt thành "true" để tiếp tục thực thi luồng ngay cả sau khi chính sách không hoạt động. |
enabled |
true | Không bắt buộc | Đặt thành "true" để thực thi chính sách này. Đặt thành "false" để "tắt" chính sách này. Chính sách sẽ không được thực thi ngay cả khi vẫn được liên kết với một luồng. |
async |
sai | Không được dùng nữa | Thuộc tính này không còn được dùng nữa. |
Bảng sau đây cung cấp mô tả cấp cao về các phần tử con của
<AssignMessage>
:
Phần tử con | Bắt buộc? | Mô tả |
---|---|---|
Toán tử phổ biến | ||
<Add> |
Không bắt buộc | Thêm thông tin vào đối tượng thông báo được chỉ định bởi
<AssignTo> .
|
<Copy> |
Không bắt buộc | Sao chép thông tin từ thông báo do source chỉ định
cho đối tượng thông báo do phần tử <AssignTo> chỉ định. |
<Remove> |
Không bắt buộc | Xoá các phần tử được chỉ định khỏi biến tin nhắn được chỉ định trong
Phần tử <AssignTo> . |
<Set> |
Không bắt buộc | Thay thế các giá trị của thuộc tính hiện có trên yêu cầu hoặc phản hồi, được chỉ định bởi
phần tử <AssignTo> .
|
Các phần tử con khác | ||
<AssignTo> |
Không bắt buộc | Chỉ định thông báo nào mà chính sách AttributionMessage hoạt động. Đây có thể là yêu cầu/phản hồi hay có thể là tin nhắn tuỳ chỉnh mới. |
<AssignVariable> |
Không bắt buộc | Chỉ định giá trị cho biến luồng. Nếu biến không tồn tại, thì
<AssignVariable> tạo ra nó. |
<IgnoreUnresolvedVariables> |
Không bắt buộc | Xác định xem quá trình xử lý có dừng khi gặp biến chưa được giải quyết hay không. |
Mỗi phần tử con trong số này được mô tả trong các phần tiếp theo.
Ví dụ
Các ví dụ sau đây trình bày một số cách mà bạn có thể sử dụng chính sách SendMessage chính sách của Google:
1: Thêm tiêu đề
Ví dụ sau đây sẽ thêm một tiêu đề vào yêu cầu bằng thuộc tính
Phần tử <Add>
:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2: Xoá tải trọng
Ví dụ sau đây sẽ xoá tải trọng khỏi phản hồi bằng <Remove>
phần tử:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3: Sửa đổi câu trả lời
Ví dụ sau đây sửa đổi một đối tượng phản hồi hiện có bằng cách thêm tiêu đề vào đối tượng đó:
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
Ví dụ này không tạo ra thông báo mới. Thay vào đó, công cụ này sẽ sửa đổi một bằng cách thêm tiêu đề HTTP.
Vì ví dụ này bỏ qua tên biến trong phần tử <AssignTo>
và chỉ định
type
làm "phản hồi", chính sách này sửa đổi đối tượng phản hồi mà mục tiêu trả về
máy chủ.
Tiêu đề HTTP mà chính sách này thêm vào thông báo phản hồi được lấy từ một biến được điền bởi chính sách LookupCache. Do đó, tin nhắn phản hồi được sửa đổi bởi Gán chính sách Thông báo có chứa tiêu đề HTTP cho biết kết quả đã được được lấy từ bộ nhớ đệm hay không. Việc đặt tiêu đề trong phản hồi có thể hữu ích khi gỡ lỗi và khắc phục sự cố.
4: Đặt nội dung động
Bạn có thể sử dụng tính năng Chỉ định thông báo để nhúng nội dung động vào tải trọng của phản hồi và yêu cầu tin nhắn.
Để nhúng các biến luồng Edge vào một tải trọng XML, hãy gói biến được chỉ định trong dấu ngoặc nhọn
dấu ngoặc nhọn, như sau: {prefix.name}
.
Ví dụ sau đây nhúng giá trị của biến luồng tiêu đề HTTP user-agent
trong phần tử XML có tên là User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Đối với các tải trọng JSON, bạn có thể chèn các biến bằng cách sử dụng variablePrefix
và
Thuộc tính variableSuffix
có các ký tự phân tách như được thể hiện trong các thuộc tính sau
ví dụ:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Để xem danh sách đầy đủ các biến luồng, hãy xem Tài liệu tham khảo về biến luồng.
Kể từ bản phát hành đám mây 16.08.17, bạn cũng có thể sử dụng dấu ngoặc nhọn để chèn biến.
5: Xoá tham số truy vấn
Ví dụ sau đây xoá tham số truy vấn apikey
khỏi yêu cầu:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Cách hay nhất là tách tham số truy vấn apikey
khỏi yêu cầu
khi bạn sử dụng chính sáchVerifyAPIKey để xác thực người dùng. Việc này là để tránh
thông tin khoá nhạy cảm được truyền đến đích phụ trợ.
6: Đặt/nhận biến
Ví dụ sau đây sử dụng 3 chính sách Chỉ định tin nhắn:
- Tạo 3 biến luồng trong yêu cầu, với các giá trị tĩnh
- Tự động lấy các biến luồng trong chính sách thứ hai trong luồng yêu cầu
- Đặt chúng trong tải trọng của phản hồi
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Trong chính sách đầu tiên, phần tử <AssignVariable>
sẽ tạo và thiết lập giá trị
các biến trong yêu cầu. Mỗi phần tử <Name>
chỉ định
tên biến và <Value>
chỉ định giá trị.
Chính sách thứ hai sử dụng phần tử <AssignVariable>
để đọc các giá trị và tạo ra 3
các biến mới:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Trong chính sách thứ hai, phần tử <Ref>
sẽ tham chiếu đến biến nguồn,
và các phần tử <Name>
chỉ định tên của các biến mới. Nếu biến
được tham chiếu bởi phần tử <Ref>
không truy cập được, bạn có thể sử dụng giá trị
do phần tử <Value>
chỉ định.
Cách thử xem bộ chính sách này:
- Thêm chính sách số 1 và số 2 vào luồng yêu cầu. Hãy nhớ đặt chính sách số 1 trước chính sách #2.
- Thêm chính sách thứ ba vào quy trình phản hồi.
- Chính sách thứ ba sử dụng phần tử
<Set>
để thêm các biến vào phản hồi. Chiến lược phát hành đĩa đơn ví dụ sau đây tạo tải trọng XML trong phản hồi mà Edge trả về ứng dụng:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Lưu ý rằng cú pháp để truy cập vào các biến luồng trong
<Set>
là để gói các biến đó vào dấu ngoặc nhọn.Hãy nhớ đặt thuộc tính
contentType
của phần tử<Payload>
thành "application/xml". - Gửi yêu cầu đến proxy API của bạn; ví dụ:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Bạn có thể chuyển hướng kết quả thông qua một tiện ích như
xmllint
để XML được hiển thị trong một cấu trúc được định dạng đẹp:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Nội dung của phản hồi phải có dạng như sau:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: Nhận tiêu đề phản hồi của chú thích dịch vụ
Trong ví dụ sau, giả sử chính sách ServiceAnnotation nằm trong yêu cầu proxy API,
và phản hồi chú thích chứa nhiều tiêu đề cùng tên
(Set-Cookie
). Giả sử biến phản hồi của Chú thích dịch vụ là biến mặc định
calloutResponse
, chính sách sau đây nhận Set-Cookie
thứ hai
giá trị tiêu đề.
<AssignMessage continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Để liệt kê tất cả các giá trị tiêu đề, hãy sử dụng biến sau:
{calloutResponse.header.Set-Cookie.values}
Mỗi phần tử con trong tệp tham chiếu này đều có các ví dụ bổ sung. Để xem thêm ví dụ, hãy xem Ví dụ về assignMessage trên GitHub.
Tham chiếu phần tử con
Phần này mô tả các phần tử con của <AssignMessage>
.
<Add>
Thêm thông tin vào yêu cầu hoặc phản hồi, được chỉ định bởi <AssignTo>
.
Phần tử <Add>
thêm các thuộc tính mới cho thông báo không có trong thông báo gốc
. Để thay đổi giá trị của các tài sản hiện có, hãy sử dụng <Set>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Loại phức tạp |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con |
<FormParams> <Headers> <QueryParams> |
Phần tử <Add>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sử dụng phần tử <FormParams>
để nhận các giá trị của
ba tham số chuỗi truy vấn từ yêu cầu ban đầu và đặt chúng làm tham số biểu mẫu trên
yêu cầu thiết bị đầu cuối đích:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sử dụng phần tử <Headers>
để thêm phần tử
Tiêu đề User-Agent
đến yêu cầu điểm cuối đích:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ 3
Ví dụ sau đây sử dụng phần tử <QueryParams>
để thêm một truy vấn
có giá trị tĩnh đối với yêu cầu:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ này sử dụng <Add>
trong luồng trước yêu cầu. Nếu bạn xem kết quả trong một công cụ
chẳng hạn như công cụ Theo dõi, yêu cầu "http://httpbin.org/get" trở thành
"http://httpbin.org/get?myParam=42".
Các phần tử con của <Add>
hỗ trợ thay thế chuỗi động, còn gọi là
mẫu thư.
<FormParams>
(con của <Add>
)
Thêm thông số biểu mẫu mới vào thông báo yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời .
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <FormParam> phần tử |
Phần tử mẹ |
<Add>
|
Phần tử con |
<FormParam> |
Phần tử <FormParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ thêm một thông số biểu mẫu duy nhất ("answer") và một giá trị tĩnh ("42") vào yêu cầu:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
Ví dụ 2
Ví dụ sau đây lấy giá trị của tham số chuỗi truy vấn name
và
thêm nó vào yêu cầu dưới dạng thông số biểu mẫu:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
Lưu ý rằng ví dụ này không chỉ định mục tiêu bằng <AssignTo>
. Chính sách này thêm
vào yêu cầu.
Ví dụ 3
Ví dụ sau đây sẽ thêm nhiều thông số biểu mẫu vào yêu cầu:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Ví dụ này lấy các tham số chuỗi truy vấn từ yêu cầu ban đầu và thêm các tham số đó dưới dạng tham số biểu mẫu cho yêu cầu được gửi đến điểm cuối đích.
Bạn có thể sử dụng công cụ Theo dõi để xem luồng. Bạn sẽ thấy phần nội dung của yêu cầu chứa dữ liệu biểu mẫu được mã hoá URL, ban đầu được chuyển vào dưới dạng chuỗi truy vấn thông số:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Bạn chỉ có thể sử dụng <FormParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: POST
- Loại thông báo: Yêu cầu
- Một (hoặc cả hai) trong số sau:
- Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với
curl
thân mến! Hãy thêm-d ""
vào yêu cầu của bạn. - Tiêu đề
Content-Length
: Đặt thành 0 (nếu không có dữ liệu trong phần tử yêu cầu ban đầu; nếu không thì độ dài hiện tại, tính bằng byte). Ví dụ: vớicurl
thêm-H "Content-Length: 0"
vào yêu cầu của bạn.
- Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với
Ví dụ:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Khi bạn thêm <FormParams>
, Edge sẽ đặt tiêu đề Content-Type
của yêu cầu thành
"application/x-www-form-urlencoded" trước khi gửi tin nhắn đến dịch vụ đích.
<Headers>
(con của <Add>
)
Thêm tiêu đề mới vào yêu cầu hoặc phản hồi được chỉ định, do hàm
Phần tử <AssignTo>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <Header> phần tử |
Phần tử mẹ |
<Add>
|
Phần tử con |
<Header> |
Phần tử <Headers>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ thêm tiêu đề user-agent
vào thông báo yêu cầu, và
sẽ chỉ định giá trị của biến luồng request.user.agent
cho tiêu đề đó.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(con của <Add>
)
Thêm các tham số truy vấn mới vào yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <QueryParam> phần tử |
Phần tử mẹ |
<Add>
|
Phần tử con |
<QueryParam> |
Phần tử <QueryParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ thêm tham số truy vấn "myParam" cho yêu cầu và chỉ định giá trị "42" vào cuộc trò chuyện:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Bạn chỉ có thể sử dụng <QueryParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: GET
- Loại thông báo: Yêu cầu
Ngoài ra, bạn chỉ có thể đặt tham số truy vấn khi phần tử <AssignTo>
Thuộc tính type
là một thông báo yêu cầu. Việc đặt chúng trên câu trả lời không có tác dụng.
Nếu bạn xác định một mảng trống các tham số truy vấn trong chính sách của mình
(<Add><QueryParams/></Add>
), chính sách này không thêm bất kỳ truy vấn nào
tham số. Điều này cũng giống như việc bỏ qua <QueryParams>
.
<AssignTo>
Xác định đối tượng mà chính sách AttributionMessage hoạt động. Có các lựa chọn sau:
- Thông báo yêu cầu:
request
do proxy API nhận được - Thông báo phản hồi:
response
được máy chủ đích trả về - Thông báo tuỳ chỉnh: Đối tượng phản hồi hoặc yêu cầu tuỳ chỉnh
Lưu ý rằng trong một số trường hợp, bạn không thể thay đổi đối tượng mà chính sách AttributionMessage hoạt động.
Ví dụ: bạn không thể sử dụng <Add>
hay <Set>
để thêm hoặc thay đổi tham số truy vấn
(<QueryParams>
) hoặc thông số biểu mẫu (<FormParams>
) trên câu trả lời. Bạn chỉ có thể
thao túng các tham số truy vấn và tham số biểu mẫu theo yêu cầu.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con | Không có |
Nếu bạn không chỉ định <AssignTo>
, chính sách này sẽ hoạt động theo yêu cầu hoặc phản hồi mặc định,
dựa vào nơi chính sách thực thi. Nếu thực thi chính sách trong quy trình yêu cầu, thì chính sách này
sẽ ảnh hưởng đến thông báo yêu cầu. Nếu thực thi trong quy trình phản hồi thì chính sách sẽ ảnh hưởng đến phản hồi
theo mặc định.
Phần tử <AssignTo>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Ví dụ 1
Ví dụ sau đây chỉ định rằng mục tiêu là yêu cầu ban đầu sẽ được gửi đến điểm cuối đích:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Bằng cách đặt createNew
thành "false" (mặc định), ví dụ này sẽ không tạo
yêu cầu mới. Mọi thao tác trong chính sách này đều ảnh hưởng đến yêu cầu ban đầu.
Ví dụ 2
Ví dụ sau đây sẽ tạo một đối tượng yêu cầu mới:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Khi bạn tạo một đối tượng yêu cầu hoặc phản hồi mới, các phần tử khác của chính sách PagingMessage
(chẳng hạn như <Add>
, <Set>
và <Set>
) hành động theo
.
Bạn có thể truy cập vào đối tượng yêu cầu mới trong các chính sách khác sau trong quy trình này hoặc gửi đối tượng yêu cầu mới yêu cầu một dịch vụ bên ngoài kèm theo chính sách ServiceAnnotation.
Ví dụ 3
Ví dụ sau đây sẽ tạo một đối tượng yêu cầu mới có tên là "MyRequestObject":
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Khi bạn tạo một đối tượng yêu cầu hoặc phản hồi mới, các phần tử khác của chính sách PagingMessage
(chẳng hạn như <Add>
, <Set>
và <Set>
) hành động theo
.
Bạn có thể truy cập vào đối tượng yêu cầu mới trong các chính sách khác sau trong quy trình này hoặc gửi đối tượng yêu cầu mới yêu cầu một dịch vụ bên ngoài kèm theo chính sách ServiceAnnotation.
Bảng sau đây mô tả các thuộc tính của <AssignTo>
:
Thuộc tính | Mô tả | Bắt buộc? | Loại |
---|---|---|---|
createNew |
Xác định xem chính sách này có tạo thông báo mới khi chỉ định giá trị hay không. Nếu giá trị là "true" thì chính sách sẽ tạo một biến mới thuộc loại
do Nếu giá trị là "false", thì chính sách sẽ phản hồi theo một trong 2 cách:
Nếu bạn không chỉ định
|
Không bắt buộc | Boolean |
transport |
Chỉ định kiểu truyền tải cho loại thông báo yêu cầu hoặc thông báo phản hồi. Giá trị mặc định là "http" (giá trị duy nhất được hỗ trợ). |
Không bắt buộc | Chuỗi |
type |
Chỉ định loại của thông báo mới khi createNew là "true". Hợp lệ
các giá trị là "request" hoặc "phản hồi".
Giá trị mặc định là "request". Nếu bạn bỏ qua thuộc tính này, thì Edge sẽ tạo một trong hai yêu cầu hoặc phản hồi, tuỳ thuộc vào vị trí mà chính sách này thực thi trong quy trình. |
Không bắt buộc | Chuỗi |
<AssignVariable>
Gán giá trị cho biến luồng đích (ví dụ: biến có giá trị được đặt bởi
chính sách AttributionMessage). Nếu biến luồng không tồn tại, thì <AssignVariable>
sẽ tạo
nó.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Loại phức tạp |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con |
<Name> (bắt buộc)<Ref> <Template> <Value> |
Giá trị mà bạn chỉ định cho biến luồng đích có thể là một trong những giá trị sau:
- Chuỗi cố định: Sử dụng phần tử con
<Value>
để chỉ định một giá trị cố định giá trị chuỗi cho biến luồng đích. - Biến luồng: Sử dụng phần tử con
<Ref>
để chỉ định giá trị của một phần tử biến luồng hiện có cho biến luồng đích. Để xem danh sách đầy đủ các quy trình Các biến có thể dùng làm nguồn, hãy xem Tài liệu tham khảo về biến Luồng. - Mẫu thông báo: Sử dụng phần tử con
<Template>
để chỉ định một phần tử mẫu thông báo cho biến luồng đích.
Phần tử <AssignVariable>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Sử dụng phần tử <Ref>
để chỉ định biến nguồn. Nếu
biến không thể truy cập được tham chiếu bởi <Ref>
, Edge sử dụng giá trị
do phần tử <Value>
chỉ định. Nếu bạn xác định
<Template>
, nó sẽ được ưu tiên hơn các phần tử con khác.
Ví dụ 1
Ví dụ sau đây đặt giá trị của một biến mới, myvar
, thành giá trị cố định
giá trị "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Ví dụ 2
Ví dụ sau đây chỉ định giá trị của biến luồng
request.header.user-agent
cho biến luồng đích myvar
và giá trị của tham số truy vấn country
đối với biến luồng đích
Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Nếu một trong hai nhiệm vụ đó không thành công, Edge sẽ gán giá trị "ErrorOnCopy" đến biến luồng đích.
Nếu biến luồng myvar
hoặc Country
không tồn tại,
<AssignVariable>
tạo ra chúng.
Ví dụ 3
Ví dụ sau sử dụng <Template>
phần tử con để nối hai biến ngữ cảnh
có một chuỗi ký tự (dấu gạch nối) giữa chúng:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Cách sử dụng phổ biến cho <AssignVariable>
là đặt giá trị mặc định cho tham số truy vấn, tiêu đề hoặc
giá trị khác có thể được chuyển vào cùng với yêu cầu. Bạn thực hiện việc này bằng cách kết hợp cả
Các phần tử con <Ref>
và <Value>
. Để biết thêm
hãy xem ví dụ về <Ref>
.
<Name>
(con của <AssignVariable>
)
Chỉ định tên của biến luồng đích (ví dụ: biến có giá trị được đặt bằng
chính sách AttributionMessage). Nếu biến có tên trong <AssignVariable>
không tồn tại, thì biến
sẽ tạo một bản ghi có tên đó.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignVariable>
|
Phần tử con | Không có |
Phần tử <Name>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Ví dụ 1
Ví dụ sau đây chỉ định biến đích đến là myvar
và đặt biến đó
thành giá trị cố định "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Nếu myvar
không tồn tại, <AssignVariable>
sẽ tạo lớp đó.
<Ref>
(con của <AssignVariable>
)
Chỉ định nguồn của sự chỉ định dưới dạng biến luồng. Biến luồng có thể là một trong biến luồng được xác định trước (như liệt kê trong tài liệu tham khảo về biến luồng) hoặc biến luồng tuỳ chỉnh mà bạn đã tạo.
Giá trị của <Ref>
luôn được hiểu là biến luồng; bạn không thể
chỉ định một chuỗi ký tự dưới dạng
giá trị. Để chỉ định một giá trị chuỗi cố định, hãy sử dụng phần tử <Value>
thay thế.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignVariable>
|
Phần tử con | Không có |
Khi bạn chỉ định một biến luồng bằng <Ref>
, hãy bỏ
dấu ngoặc nhọn "{}" mà bạn thường dùng để tham chiếu đến một biến luồng. Ví dụ:
để đặt giá trị của biến mới thành giá trị của luồng client.host
biến:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Để xác định giá trị mặc định cho biến luồng đích, hãy sử dụng <Value>
kết hợp với <Ref>
. Nếu biến luồng được chỉ định bởi
<Ref>
không tồn tại, không thể đọc hoặc rỗng, thì Edge sẽ gán giá trị này
<Value>
thành biến luồng đích.
Phần tử <Ref>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Ví dụ 1
Ví dụ sau đây chỉ định giá trị của biến luồng
request.header.user-agent
cho biến luồng đích myvar
và
giá trị của tham số truy vấn country
thành biến Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Trong ví dụ này, Edge không được chỉ định giá trị mặc định (hoặc giá trị dự phòng) cho bài tập.
Ví dụ 2
Ví dụ sau đây sẽ chỉ định giá trị của biến luồng request.header.user-agent
vào biến luồng đích myvar
và giá trị
của tham số truy vấn country
thành biến Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Trong ví dụ này, nếu giá trị của biến luồng request.header.user-agent
hoặc tham số truy vấn Country
rỗng, không đọc được hoặc không đúng định dạng, Edge sẽ gán
giá trị "ErrorOnCopy" cho các biến mới.
Ví dụ 3
Một trường hợp sử dụng phổ biến cho <AssignVariable>
là đặt giá trị mặc định của truy vấn
thông số, tiêu đề hoặc giá trị khác có thể được chuyển vào cùng với yêu cầu. Ví dụ: bạn tạo
proxy API thời tiết, trong đó yêu cầu lấy một tham số truy vấn có tên là "w". Chiến dịch này
chứa mã nhận dạng của thành phố mà bạn muốn nhận thông tin thời tiết. URL yêu cầu có
biểu mẫu:
http://myCO.com/v1/weather/forecastrss?w=city_ID
Để xác định giá trị mặc định cho "w", hãy tạo một chính sách AllowedMessage như sau:
<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3"> <AssignTo createNew="false" transport="http" type="request"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignVariable> <Name>request.queryparam.w</Name> <Ref>request.queryparam.w</Ref> <Value>12797282</Value> </AssignVariable> </AssignMessage>
Trong ví dụ này, <AssignVariable>
nhận được giá trị của request.queryparam.w
và gán đối tượng đó cho chính nó. Nếu biến luồng có giá trị rỗng, nghĩa là "w" tham số truy vấn cũ là
loại bỏ khỏi yêu cầu, thì ví dụ này sử dụng giá trị mặc định từ
Phần tử <Value>
. Do đó, bạn có thể gửi yêu cầu đến API này
proxy bỏ qua "w" tham số truy vấn:
http://myCO.com/v1/weather/forecastrss
...và vẫn yêu cầu proxy API trả về kết quả hợp lệ.
Không giống như khi sử dụng <Value>
, giá trị của <Ref>
phải là
biến luồng, chẳng hạn như thuộc tính của request
, response
hoặc
Đối tượng target
. Giá trị này cũng có thể là một biến luồng tuỳ chỉnh mà bạn đã tạo.
Nếu bạn chỉ định một biến luồng không tồn tại cho giá trị <Ref>
,
và giá trị của <IgnoreUnresolvedVariables>
là "true", Edge sẽ đưa ra thông báo lỗi.
<Template>
(con của <AssignVariable>
)
Chỉ định một mẫu thông báo. Tin nhắn cho phép bạn thực hiện việc thay thế chuỗi biến khi chính sách thực thi, và có thể kết hợp các chuỗi ký tự với tên biến được gói trong ngoặc dấu ngoặc nhọn. Ngoài ra, tin nhắn mẫu hỗ trợ như thoát và chuyển đổi chữ hoa chữ thường.
Sử dụng thuộc tính ref
để chỉ định một biến luồng trong đó giá trị của biến
là một mẫu tin nhắn. Ví dụ: bạn có thể lưu trữ mẫu tin nhắn dưới dạng
thuộc tính tuỳ chỉnh
trên ứng dụng của nhà phát triển. Khi Edge xác định được ứng dụng của nhà phát triển sau khi xác minh khoá API
hoặc mã thông báo bảo mật (thông qua một chính sách bổ sung), <AssignVariable>
có thể sử dụng mẫu thông báo có sẵn trong thuộc tính tuỳ chỉnh của ứng dụng
dưới dạng biến luồng trong chính sách bảo mật. Ví dụ sau giả định thông báo
có sẵn trong thuộc tính khách hàng có tên là message_template
trên
ứng dụng của nhà phát triển thực hiện lệnh gọi API, trong đó chính sáchVerifyAPIKey được dùng để xác minh
khoá API của ứng dụng:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignVariable>
|
Phần tử con | Không có |
Phần tử <Template>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sử dụng cú pháp tạo mẫu thông báo để liên kết 2 biến ngữ cảnh có một chuỗi ký tự (dấu gạch nối) giữa chúng:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Ví dụ 2
Ví dụ sau đây chỉ định một biến luồng, trong đó giá trị của biến là một mẫu thông báo được xác định trước. Sử dụng tuỳ chọn này nếu bạn muốn chèn một mẫu được xác định trước tại mà không cần sửa đổi chính sách:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Ví dụ 3
Ví dụ sau đây chỉ định một biến luồng và một giá trị văn bản. Trong trường hợp này, nếu
biến được tham chiếu không rỗng, giá trị đó sẽ được dùng làm mẫu. Nếu giá trị tham chiếu
giá trị là rỗng, thì giá trị văn bản (trong trường hợp này là {system.uuid}-{messageid}
)
sẽ được dùng làm mẫu. Mẫu này rất hữu ích khi cung cấp thông tin "ghi đè" giá trị, trong đó
trong một số trường hợp, bạn muốn ghi đè mẫu mặc định (phần văn bản) bằng các giá trị
được đặt linh động. Ví dụ: câu lệnh có điều kiện có thể lấy giá trị
từ bản đồ khoá-giá trị và đặt biến được tham chiếu thành giá trị đó:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(con của <AssignVariable>
)
Xác định giá trị của biến luồng đích được đặt bằng <AssignVariable>
. Chiến lược phát hành đĩa đơn
giá trị luôn được hiểu là một chuỗi cố định; bạn không thể sử dụng biến luồng làm giá trị, thậm chí
nếu bạn đặt giá trị trong dấu ngoặc ("{}"). Để dùng biến luồng, hãy sử dụng <Ref>
thay thế.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignVariable>
|
Phần tử con | Không có |
Khi được sử dụng kết hợp với phần tử <Ref>
, <Value>
đóng vai trò là giá trị mặc định (hoặc dự phòng). Nếu không chỉ định <Ref>
,
không thể giải quyết hoặc rỗng, giá trị <Value>
được dùng.
Phần tử <Value>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt giá trị của biến luồng đích, myvar
,
thành giá trị cố định "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Ví dụ 2
Ví dụ sau đây chỉ định giá trị của biến luồng
request.header.user-agent
cho biến luồng myvar
và giá trị
của tham số truy vấn country
thành biến Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Nếu một trong hai bài tập không thành công, <AssignVariable>
sẽ gán giá trị "ErrorOnCopy" đến
biến luồng đích.
<Copy>
Sao chép các giá trị từ thông báo do thuộc tính source
chỉ định
vào thông báo do phần tử <AssignTo>
chỉ định. Nếu bạn không chỉ định
một mục tiêu có <AssignTo>
, thì chính sách này sẽ sao chép các giá trị vào yêu cầu hoặc phản hồi,
tuỳ thuộc vào vị trí mà chính sách này thực thi trong quy trình.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
Phần tử <Copy>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
Ví dụ 1
Ví dụ sau đây sao chép tiêu đề, 3 thông số biểu mẫu, đường dẫn và tất cả các truy vấn thông số từ yêu cầu đến một yêu cầu tuỳ chỉnh mới:
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Phần tử <Copy>
có các thuộc tính như sau:
Thuộc tính | Mô tả | Bắt buộc? | Loại |
---|---|---|---|
nguồn |
Chỉ định đối tượng nguồn của bản sao.
|
Không bắt buộc | Chuỗi |
<FormParams>
(con của <Copy>
)
Sao chép các thông số biểu mẫu từ yêu cầu do
Thuộc tính source
của phần tử <Copy>
cho yêu cầu
do phần tử <AssignTo>
chỉ định. Phần tử này không ảnh hưởng đến
của bạn.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm các phần tử <FormParam> hoặc một mảng trống |
Phần tử mẹ |
<Copy>
|
Phần tử con |
<FormParam> |
Phần tử <FormParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ sao chép một thông số biểu mẫu duy nhất từ yêu cầu sang yêu cầu tuỳ chỉnh "MyCustomRequest":
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sẽ sao chép tất cả thông số biểu mẫu vào yêu cầu tuỳ chỉnh "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 3
Ví dụ sau đây sẽ sao chép 3 thông số biểu mẫu vào yêu cầu tuỳ chỉnh "MyCustomRequest":
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 4
Nếu có nhiều tham số biểu mẫu có cùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ này sao chép "f1", "f2" và giá trị thứ hai của "f3". Nếu "f3" chỉ có một thì giá trị đó sẽ không được sao chép.
Bạn chỉ có thể sử dụng <FormParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: POST
- Loại thông báo: Phản hồi
- Một (hoặc cả hai) trong số sau:
- Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với
curl
thân mến! Hãy thêm-d ""
vào yêu cầu của bạn. - Tiêu đề
Content-Length
: Đặt thành 0 (nếu không có dữ liệu nào trong yêu cầu ban đầu; nếu không thì độ dài hiện tại. Ví dụ: vớicurl
thêm-H "Content-Length: 0"
vào yêu cầu của bạn.
- Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với
Khi bạn sao chép <FormParams>
, <Copy>
sẽ đặt Content-Type
của tin nhắn thành
"application/x-www-form-urlencoded" trước khi gửi tin nhắn đến dịch vụ đích.
<Headers>
(con của <Copy>
)
Sao chép tiêu đề HTTP từ yêu cầu hoặc thông báo phản hồi do
thuộc tính source
của phần tử <Copy>
cho yêu cầu
hoặc tin nhắn phản hồi do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Một mảng gồm các phần tử <Header> hoặc một mảng trống |
Phần tử mẹ |
<Copy>
|
Phần tử con |
<Header> |
Phần tử <Headers>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ sao chép tiêu đề user-agent
trong yêu cầu vào
đối tượng yêu cầu mới, tuỳ chỉnh:
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 2
Để sao chép tất cả tiêu đề, hãy dùng một phần tử <Headers>
trống như ví dụ sau
cho thấy:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 3
Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="copy-headers-3"> <Copy source="request"> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ này sao chép "h1", "h2" và giá trị thứ hai của "h3". Nếu "h3" chỉ có một thì giá trị đó sẽ không được sao chép.
<Path>
(con của <Copy>
)
Xác định xem có nên sao chép đường dẫn từ yêu cầu nguồn sang đích đến hay không của bạn. Phần tử này không ảnh hưởng đến câu trả lời.
Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép đường dẫn từ thông báo yêu cầu do
Thuộc tính source
của phần tử <Copy>
với yêu cầu
do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <Path>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau cho biết rằng chính sách AllowedMessage phải sao chép đường dẫn từ nguồn yêu cầu đối với đối tượng yêu cầu tuỳ chỉnh mới:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <Path>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
<Payload>
(con của <Copy>
)
Xác định xem có nên sao chép tải trọng từ nguồn sang đích hay không. Nguồn và đích có thể là yêu cầu hoặc phản hồi.
Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép tải trọng từ thông báo do
Thuộc tính source
của phần tử <Copy>
với thông báo
do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <Payload>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <Payload>
thành "true" để tải trọng yêu cầu là
sao chép từ yêu cầu sang phản hồi:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(con của <Copy>
)
Sao chép các tham số chuỗi truy vấn từ yêu cầu do
Thuộc tính source
của phần tử <Copy>
với yêu cầu được chỉ định
bởi phần tử <AssignTo>
. Phần tử này không ảnh hưởng đến câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Một mảng gồm các phần tử <QueryParam> hoặc một mảng trống |
Phần tử mẹ |
<QueryParam>
|
Phần tử con | Không có |
Phần tử <QueryParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau sẽ sao chép "my_param" từ yêu cầu sang một truy vấn mới. đối tượng yêu cầu tuỳ chỉnh:
<AssignMessage name="copy-queryparams-1"> <Copy source="request"> <QueryParams> <QueryParam name="my_param"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sẽ sao chép tất cả tham số truy vấn từ yêu cầu sang một thuộc tính tuỳ chỉnh mới đối tượng yêu cầu:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ 3
Nếu có nhiều tham số truy vấn có cùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Ví dụ này sẽ sao chép "qp1", "qp2" và giá trị thứ hai của "qp3". Nếu "qp3" chỉ có một giá trị, thì giá trị đó sẽ không được sao chép.
Bạn chỉ có thể sử dụng <QueryParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: GET
- Loại thông báo: Yêu cầu
<ReasonPhrase>
(con của <Copy>
)
Xác định xem có nên sao chép cụm từ lý do từ phản hồi nguồn sang phản hồi đích. Phần tử này không ảnh hưởng đến yêu cầu.
Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép ReasonPhrase
từ phản hồi
được chỉ định bởi thuộc tính source
của phần tử <Copy>
cho phản hồi
do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <ReasonPhrase>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <ReasonPhrase>
thành "true", điều này khiến <Copy>
để sao chép cụm từ lý do từ phản hồi mặc định vào đối tượng phản hồi tuỳ chỉnh:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <ReasonPhrase>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Phản hồi
<StatusCode>
(con của <Copy>
)
Xác định xem mã trạng thái có được sao chép từ phản hồi nguồn sang đích hay không của bạn. Phần tử này không ảnh hưởng đến yêu cầu.
Nếu giá trị "true" (đúng), chính sách này sẽ sao chép mã trạng thái từ thông báo phản hồi được chỉ định trong
thuộc tính source
của phần tử <Copy>
cho câu trả lời
do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <StatusCode>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <StatusCode>
thành "true", việc này sẽ sao chép mã trạng thái
từ đối tượng phản hồi mặc định sang đối tượng phản hồi mới tuỳ chỉnh:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <StatusCode>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Phản hồi
Việc sử dụng <StatusCode>
phổ biến là để đảm bảo rằng phản hồi proxy có cùng trạng thái
là phản hồi nhận được từ mục tiêu khi createNew
của <AssignTo>
được đặt thành "true".
<Verb>
(con của <Copy>
)
Xác định xem động từ HTTP có được sao chép từ yêu cầu nguồn sang đích hay không của bạn. Phần tử này không ảnh hưởng đến câu trả lời.
Nếu giá trị là "true", sẽ sao chép động từ có trong thuộc tính source
của phần tử <Copy>
vào yêu cầu được chỉ định trong phần tử <AssignTo>
.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <Verb>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <Verb>
thành "true", nghĩa là sẽ sao chép động từ trong
thành một yêu cầu mới, tuỳ chỉnh:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <Verb>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
<Version>
(con của <Copy>
)
Xác định xem phiên bản HTTP có được sao chép từ yêu cầu nguồn sang yêu cầu đích. Phần tử này không ảnh hưởng đến câu trả lời.
Nếu giá trị "true" (đúng), sẽ sao chép phiên bản HTTP tìm được trong thuộc tính source
của phần tử <Copy>
thành đối tượng do phần tử <AssignTo>
chỉ định.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Copy>
|
Phần tử con | Không có |
Phần tử <Version>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <Version>
thành "true" dựa trên yêu cầu, dữ liệu này sẽ sao chép
phiên bản từ đối tượng yêu cầu mặc định thành đối tượng yêu cầu tuỳ chỉnh mới:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <Version>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
<DisplayName>
Hãy sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong phần
trình chỉnh sửa proxy giao diện người dùng quản lý với một cái tên khác, nghe tự nhiên hơn.
Phần tử <DisplayName>
áp dụng chung cho mọi chính sách.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc. Nếu bạn bỏ qua <DisplayName> , giá trị của
Thuộc tính name của chính sách được dùng |
Loại | Chuỗi |
Phần tử mẹ | <PolicyElement> |
Phần tử con | Không có |
Phần tử <DisplayName>
sử dụng cú pháp sau:
Cú pháp
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Ví dụ:
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Phần tử <DisplayName>
không có thuộc tính hoặc phần tử con.
<IgnoreUnresolvedVariables>
Xác định xem quá trình xử lý có dừng khi gặp biến chưa được giải quyết hay không.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con | Không có |
Đặt thành true
để bỏ qua các biến chưa được giải quyết và tiếp tục xử lý; nếu không
false
Giá trị mặc định là false
.
Việc đặt <IgnoreUnresolvedVariables>
thành true
khác với việc đặt giá trị
continueOnError
của <AssignMessage>
đến true
trong đó dành riêng cho
cài đặt và nhận giá trị của biến. Nếu bạn đặt continueOnError
thành
true
, thì Edge sẽ bỏ qua tất cả các lỗi, chứ không chỉ các lỗi gặp phải khi sử dụng
biến.
Phần tử <IgnoreUnresolvedVariables>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <IgnoreUnresolvedVariables>
thành "true":
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Xoá tiêu đề, tham số truy vấn, tham số biểu mẫu và/hoặc phần tải tin nhắn khỏi
một tin nhắn. Tin nhắn có thể là một yêu cầu hoặc phản hồi. Bạn chỉ định thông báo <Remove>
thực hiện bằng cách sử dụng phần tử <AssignTo>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Loại phức tạp |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con |
<FormParams> <Headers> <Payload> <QueryParams> |
Một trường hợp sử dụng phổ biến cho <Remove>
là xoá tham số truy vấn chứa thông tin nhạy cảm
thông tin từ đối tượng yêu cầu đến để tránh truyền thông tin đó đến máy chủ phụ trợ.
Phần tử <Remove>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Ví dụ 1
Ví dụ sau đây xoá nội dung của thư khỏi câu trả lời:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Trong quy trình phản hồi, chính sách này sẽ xoá phần nội dung của phản hồi và chỉ trả về HTTP đến máy khách.
Ví dụ 2
Ví dụ sau đây xoá tất cả tham số biểu mẫu và tham số truy vấn khỏi yêu cầu:
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(con của <Remove>
)
Xoá các thông số biểu mẫu được chỉ định khỏi yêu cầu. Phần tử này không ảnh hưởng đến của bạn.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm các phần tử <FormParam> hoặc một mảng trống |
Phần tử mẹ |
<Remove>
|
Phần tử con |
<FormParam> |
Phần tử <FormParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
Ví dụ 1
Ví dụ sau đây xoá 3 thông số biểu mẫu khỏi yêu cầu:
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Ví dụ 2
Ví dụ sau đây xoá tất cả thông số biểu mẫu khỏi yêu cầu:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Ví dụ 3
Nếu có nhiều tham số biểu mẫu có cùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Ví dụ này loại bỏ "f1", "f2" và giá trị thứ hai của "f3". Nếu "f3" chỉ có một thì giá trị đó sẽ không bị xoá.
Bạn chỉ có thể sử dụng <FormParams>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
Content-Type
: "application/x-www-form-url Chơi"
<Headers>
(con của <Remove>
)
Xoá các tiêu đề HTTP được chỉ định khỏi yêu cầu hoặc phản hồi, được chỉ định bởi
Phần tử <AssignTo>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm các phần tử <Header> hoặc một mảng trống |
Phần tử mẹ |
<Remove>
|
Phần tử con |
<Header> |
Phần tử <Headers>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
Ví dụ 1
Ví dụ sau đây sẽ xoá tiêu đề user-agent
khỏi yêu cầu:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sẽ xoá tất cả tiêu đề khỏi yêu cầu:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ 3
Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ này loại bỏ "h1", "h2" và giá trị thứ hai của "h3" khỏi yêu cầu. Nếu "h3" chỉ có một giá trị, nên sẽ không bị xoá.
<Payload>
(con của <Remove>
)
Xác định xem <Remove>
có xoá tải trọng trong yêu cầu hoặc phản hồi hay không, tức là
do phần tử <AssignTo>
chỉ định. Đặt thành "true" đến
xoá tải trọng; ngược lại là "false". Giá trị mặc định là "false".
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<Remove>
|
Phần tử con | Không có |
Phần tử <Payload>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt <Payload>
thành "true" để tải trọng yêu cầu là
đã xoá:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(con của <Remove>
)
Xoá các tham số truy vấn đã chỉ định khỏi yêu cầu. Phần tử này không ảnh hưởng đến của bạn.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm các phần tử <QueryParam> hoặc một mảng trống |
Phần tử mẹ |
<Remove>
|
Phần tử con |
<QueryParam> |
Phần tử <QueryParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Ví dụ 1
Ví dụ sau đây xoá một tham số truy vấn khỏi yêu cầu:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sẽ xoá tất cả tham số truy vấn khỏi yêu cầu:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ 3
Nếu có nhiều tham số truy vấn có cùng tên, hãy sử dụng cú pháp sau:
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ví dụ này loại bỏ "qp1", "qp2" và giá trị thứ hai của "qp3" khỏi yêu cầu. Nếu "qp3" chỉ có một giá trị, nên sẽ không bị xoá.
Ví dụ 4
Ví dụ sau đây xoá tham số truy vấn apikey
khỏi yêu cầu:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Bạn chỉ có thể sử dụng <QueryParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: GET
- Loại thông báo: Yêu cầu
<Set>
Đặt thông tin trong yêu cầu hoặc thông báo phản hồi, được chỉ định bởi
Phần tử <AssignTo>
. <Set>
ghi đè tiêu đề hoặc
các thông số đã tồn tại trong thư gốc. Để tạo tiêu đề hoặc thông số mới, hãy sử dụng
thay thế bằng phần tử <Add>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Loại phức tạp |
Phần tử mẹ |
<AssignMessage>
|
Phần tử con |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
Phần tử <Set>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây cho thấy phần tử <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(con của <Set>
)
Ghi đè các thông số biểu mẫu hiện có trong một yêu cầu và thay thế chúng bằng các giá trị mới mà bạn chỉ định bằng phần tử này. Phần tử này không ảnh hưởng đến câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <FormParam> phần tử |
Phần tử mẹ |
<Set>
|
Phần tử con |
<FormParam> |
Phần tử <FormParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt thông số biểu mẫu có tên là "myparam" với giá trị của
Biến request.header.myparam
trong một yêu cầu tuỳ chỉnh mới:
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Bạn chỉ có thể sử dụng <FormParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: POST
- Loại thông báo: Yêu cầu
Nếu bạn xác định thông số biểu mẫu trống trong chính sách của mình
(<Add><FormParams/></Add>
), chính sách không thêm bất kỳ biểu mẫu nào
tham số. Điều này cũng giống như việc bỏ qua <FormParams>
.
<Set>
thay đổi Content-Type
của tin nhắn thành
"application/x-www-form-urlencoded" trước khi gửi đến điểm cuối đích.
<Headers>
(con của <Set>
)
Ghi đè tiêu đề HTTP hiện có trong yêu cầu hoặc phản hồi, được chỉ định bởi
Phần tử <AssignTo>
.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <Header> phần tử |
Phần tử mẹ |
<Set>
|
Phần tử con |
<Header> |
Phần tử <Headers>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt tiêu đề user-agent
thành giá trị của
Biến request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Nếu bạn xác định tiêu đề trống trong chính sách
(<Add><Headers/></Add>
), chính sách này không thêm tiêu đề. Chiến dịch này
cũng giống như việc bỏ qua <Headers>
.
<Path>
(con của <Set>
)
<Payload>
(con của <Set>
)
Xác định nội dung thông báo cho một yêu cầu hoặc phản hồi, được chỉ định bởi
Phần tử <AssignTo>
. Tải trọng có thể là bất kỳ loại nội dung hợp lệ nào, chẳng hạn như
văn bản, JSON hoặc XML.
Giá trị mặc định | chuỗi trống |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<Set>
|
Phần tử con | Không có |
Phần tử <Payload>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây thiết lập một tải trọng văn bản thuần tuý:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Ví dụ 2
Ví dụ sau đây sẽ thiết lập một tải trọng JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Ví dụ 3
Ví dụ sau đây sẽ chèn các giá trị biến vào tải trọng bằng cách gói tên biến trong dấu ngoặc nhọn:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Trong các phiên bản cũ hơn của Apigee Edge, ví dụ: trước bản phát hành đám mây 16.08.17, bạn có thể
không được sử dụng dấu ngoặc nhọn để biểu thị các tham chiếu biến trong tải trọng JSON. Trong các bản phát hành đó, bạn
cần phải dùng các thuộc tính variablePrefix
và variableSuffix
để
chỉ định các ký tự phân tách và sử dụng các ký tự đó để gói tên biến, như sau:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Cú pháp cũ hơn này vẫn hoạt động.
Ví dụ 4
Nội dung của <Payload>
được coi là một mẫu thông báo. Điều này có nghĩa là
Chính sách AttributionMessage thay thế các biến được đặt trong dấu ngoặc nhọn bằng giá trị của thuộc tính
trong thời gian chạy.
Ví dụ sau đây sử dụng cú pháp dấu ngoặc nhọn để đặt một phần của tải trọng thành giá trị biến:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
Bảng sau đây mô tả các thuộc tính của <Payload>
:
Thuộc tính | Mô tả | Sự hiện diện | Loại |
---|---|---|---|
contentType |
Nếu được chỉ định, giá trị của |
Không bắt buộc | Chuỗi |
variablePrefix |
Nếu muốn, hãy chỉ định dấu phân cách phía trước trên biến luồng. Giá trị mặc định là "{". Cho để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Luồng. | Không bắt buộc | Char |
variableSuffix |
Nếu muốn, hãy chỉ định dấu phân cách ở cuối trên một biến luồng. Mặc định là "}". Cho để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Luồng. | Không bắt buộc | Char |
<QueryParams>
(con của <Set>
)
Ghi đè các tham số truy vấn hiện có trong yêu cầu bằng các giá trị mới. Phần tử này không có tác dụng về một câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Mảng gồm <QueryParam> phần tử |
Phần tử mẹ |
<Set>
|
Phần tử con |
<QueryParam> |
Phần tử <QueryParams>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt "địa chỉ" với giá trị của
Biến request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Bạn chỉ có thể sử dụng <QueryParams>
khi đáp ứng các tiêu chí sau:
- Động từ HTTP: GET
- Loại thông báo: Yêu cầu
Nếu bạn xác định tham số truy vấn trống trong chính sách
(<Set><QueryParams/></Set>
), chính sách không đặt bất kỳ truy vấn nào
tham số. Điều này cũng giống như việc bỏ qua <QueryParams>
.
<ReasonPhrase>
(con của <Set>
)
Đặt cụm từ lý do cho câu trả lời. Bước này thường được thực hiện khi gỡ lỗi kết hợp với
<StatusCode>
. Phần tử này không ảnh hưởng đến yêu cầu.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<Set>
|
Phần tử con | Không có |
Phần tử <ReasonPhrase>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây xác định một cụm từ lý do đơn giản:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Ví dụ 2
Nội dung của <ReasonPhrase>
được coi là một mẫu thông báo. Điều này có nghĩa là
tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của
biến được tham chiếu, như trong ví dụ sau:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Bạn chỉ có thể sử dụng <ReasonPhrase>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Phản hồi
<StatusCode>
(con của <Set>
)
Đặt mã trạng thái trên phản hồi. Phần tử này không ảnh hưởng đến yêu cầu.
Giá trị mặc định | "200" (khi thuộc tính createNew của <AssignTo>
được đặt thành 'true') |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi hoặc variable |
Phần tử mẹ |
<Set>
|
Phần tử con | Không có |
Phần tử <StatusCode>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt mã trạng thái đơn giản:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Ví dụ 2
Nội dung của <StatusCode>
được coi là một mẫu thông báo. Điều này có nghĩa là
tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của
biến được tham chiếu, như trong ví dụ sau:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Bạn chỉ có thể sử dụng <StatusCode>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Phản hồi
<Verb>
(con của <Set>
)
Đặt động từ HTTP trên yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi hoặc variable |
Phần tử mẹ |
<Set>
|
Phần tử con | Không có |
Phần tử <Verb>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt một động từ đơn giản cho yêu cầu:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Ví dụ 2
Nội dung của <Verb>
được coi là một mẫu thông báo. Điều này có nghĩa là tên biến
được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của tham chiếu
biến.
Ví dụ sau đây sử dụng một biến để điền một động từ:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Bạn chỉ có thể sử dụng <Verb>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
<Version>
(con của <Set>
)
Thiết lập phiên bản HTTP trên một yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi hoặc variable |
Phần tử mẹ |
<Set>
|
Phần tử con | Không có |
Phần tử <Version>
sử dụng cú pháp sau:
Cú pháp
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Ví dụ 1
Ví dụ sau đây đặt số phiên bản thành "1.1":
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Ví dụ 2
Sau đây là cách sử dụng biến trong dấu ngoặc nhọn để đặt số phiên bản:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Nội dung của <Version>
được coi là một mẫu thông báo. Điều này có nghĩa là
tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của thuộc tính
biến.
Bạn chỉ có thể sử dụng <Version>
khi đáp ứng các tiêu chí sau:
- Loại thông báo: Yêu cầu
Tạo thông báo cho yêu cầu tuỳ chỉnh
Bạn có thể sử dụng chính sách AttributionMessage để tạo thông báo yêu cầu tuỳ chỉnh. Sau khi bạn tạo một nhóm quảng cáo tuỳ chỉnh yêu cầu, bạn có thể sử dụng theo các cách sau:
- Truy cập vào các biến của nó trong các chính sách khác
- Truyền đến dịch vụ bên ngoài
Để tạo thông báo yêu cầu tuỳ chỉnh, hãy sử dụng phần tử <AssignTo>
trong chính sách của ApplyMessage
. Đặt createNew
thành "true" và chỉ định tên của thư mới trong phần nội dung
của phần tử, như trong ví dụ sau:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Theo mặc định, Edge không làm gì với thông báo yêu cầu tuỳ chỉnh. Sau khi tạo xong, Edge sẽ tiếp tục thực hiện quy trình với yêu cầu ban đầu. Để sử dụng yêu cầu tuỳ chỉnh, hãy thêm một chính sách như dưới dạng chính sách ServiceAnnotation đến proxy của bạn để có thể chuyển yêu cầu tuỳ chỉnh tới một ứng dụng .
Sau đây là ví dụ về cách tạo thông báo yêu cầu tuỳ chỉnh:
Ví dụ 1
Ví dụ sau đây sẽ tạo một đối tượng yêu cầu tuỳ chỉnh bằng tính năng Gán tin nhắn:
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Ví dụ sau:
- Tạo một đối tượng thông báo yêu cầu mới có tên là "MyCustomRequest".
- Trên MyCustomRequest, chính sách này:
- Sao chép giá trị của tiêu đề HTTP
user-agent
từ URL đến đối với tin nhắn mới. Vì<Copy>
sử dụng tham chiếu tuyệt đối đến Biến luồnguser-agent
, không có cần chỉ định thuộc tínhsource
cho<Copy>
. - Đặt tham số truy vấn
address
trên thông báo tuỳ chỉnh thành giá trị của tham số truy vấnaddy
của yêu cầu đến. - Đặt động từ HTTP thành
GET
.
- Sao chép giá trị của tiêu đề HTTP
- Đặt
<IgnoreUnresolvedVariables>
thành "false". Khi<IgnoreUnresolvedVariables>
là "false", nếu một trong các biến mà chính sách cố gắng thêm không tồn tại, Edge sẽ ngừng xử lý trong luồng API.
Ví dụ 2
Dưới đây là một ví dụ khác minh hoạ cách tạo đối tượng yêu cầu tuỳ chỉnh bằng thao tác Chỉ định Thông báo:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Ví dụ này sẽ tạo một yêu cầu tuỳ chỉnh mới có tên là "partner.request". Sau đó, phương pháp này sẽ đặt
<Verb>
và <Payload>
về yêu cầu mới.
Bạn có thể truy cập vào thông báo yêu cầu tuỳ chỉnh trong một chính sách PagingMessage khác xuất hiện sau này trong
luồng. Ví dụ sau đây sẽ lấy giá trị của thông báo yêu cầu tuỳ chỉnh
Tiêu đề user-agent
:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
Video
Hãy xem các video sau để tìm hiểu thêm về chính sách AssignmentsMessage.
Video | Mô tả |
---|---|
Lý do giao việc Chính sách về thư? | Tìm hiểu về lợi ích của việc sử dụng chính sách OnlyMessage để sửa đổi yêu cầu API hoặc mà không sửa đổi mã phụ trợ. |
Sao chép các thành phần API bằng chính sách AttributionMessage | Sao chép các phần tử từ một yêu cầu hoặc phản hồi API và tạo một yêu cầu hoặc phản hồi mới bằng cách sử dụng chính sách SendMessage. |
Xoá API các phần tử sử dụng chính sách AttributionMessage | Xoá các phần tử API và sửa đổi API trước khi API đó tiếp cận phần phụ trợ mục tiêu bằng cách sử dụng Chính sách AttributionMessage. |
Thêm và đặt API các phần tử sử dụng chính sách AttributionMessage | Thay đổi yêu cầu hoặc phản hồi API bằng cách thêm tham số truy vấn, tiêu đề, tham số biểu mẫu hoặc tải trọng dữ liệu bằng cách sử dụng chính sách SendMessage. |
Tạo mục tiêu tuỳ chỉnh các biến bằng chính sách AttributionMessage | Đặt các biến luồng tuỳ chỉnh bằng chính sách AttributionMessage và tận dụng các biến trong các chính sách khác trong proxy API. |
Tạo mới đối tượng yêu cầu hoặc phản hồi bằng chính sách AddMessage | Tạo đối tượng phản hồi hoặc yêu cầu API mới bằng chính sách AttributionMessage tại API thời gian chạy. |
Tạo API mô phỏng bằng chính sách AttributionMessage | Tạo một API REST mô phỏng đơn giản bằng cách thêm chính sách PagingMessage vào phản hồi luồng. |
Thiết lập hoặc sửa đổi tải trọng bằng cách sử dụng chính sách SendMessage | Chuyển đổi yêu cầu REST thành yêu cầu SOAP bằng cách đặt Tải trọng SOAP bằng chính sách AssignmentsMessage chính sách trong thời gian chạy API. |
Mã lỗi
Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng để biết bạn có đang phát triển các quy tắc lỗi để xử lý lỗi hay không. Để tìm hiểu thêm, hãy xem bài viết Những điều cần biết về lỗi liên quan đến chính sách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi chính sách thực thi.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Cách khắc phục |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | Chính sách này không đặt được biến. Xem chuỗi lỗi để biết tên của biến chưa được phân giải. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Lỗi này xảy ra nếu thuộc tính Biến loại thông báo đại diện cho toàn bộ yêu cầu và phản hồi HTTP. Các biến luồng Edge tích hợp sẵn |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Lỗi này xảy ra nếu một biến được chỉ định trong chính sách Chỉ định thông báo là:
|
build |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai một proxy chứa chính sách này.
Tên lỗi | Nguyên nhân | Cách khắc phục |
---|---|---|
InvalidIndex |
Nếu chỉ mục được chỉ định trong phần tử <Copy> và/hoặc <Remove> của chính sách Chỉ định thông báo là 0 hoặc số âm, thì việc triển khai Proxy API sẽ không thành công.
|
build |
InvalidVariableName |
Nếu phần tử con <Name> trống hoặc không được chỉ định trong phần tử <AssignVariable> , thì việc triển khai proxy API sẽ không thành công vì không có tên biến hợp lệ để gán giá trị. Bạn phải nhập tên biến hợp lệ.
|
build |
InvalidPayload |
Trọng tải được chỉ định trong chính sách là không hợp lệ. |
Biến lỗi
Các biến này được đặt khi chính sách này kích hoạt lỗi trong thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi liên quan đến chính sách.
Biến | Trong đó | Ví dụ: |
---|---|---|
fault.name="fault_name" |
fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. | assignmessage.AM-SetResponse.failed = true |
Ví dụ về phản hồi khi gặp lỗi
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Ví dụ về quy tắc lỗi
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Giản đồ
Mỗi loại chính sách được xác định bằng một giản đồ XML (.xsd
). Giản đồ chính sách để tham khảo
đều có trên GitHub.
Chủ đề có liên quan
Đang hoạt động Bạn có thể xem các mẫu của chính sách AttributionMessage trong các mẫu Nền tảng API.
Để xem ví dụ nâng cao hơn về cách ghi đè target.url
từ
ProxyEndpoint, hãy xem bài viết này trên Cộng đồng Apigee.
Cách xem "đường dẫn đã đặt" trong chính sách về ServiceAnnotation, hãy tham khảo nội dung Tìm hiểu bằng cách làm ví dụ này trong mẫu GitHub của Apigee. Bạn chỉ cần sao chép kho lưu trữ và hãy làm theo hướng dẫn trong chủ đề đó. Ví dụ này sử dụng chính sách AttributionMessage để thiết lập một đường dẫn yêu cầu, sau đó sử dụng chính sách Chú thích dịch vụ để gửi yêu cầu đến một dịch vụ bên ngoài.