查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
結果
AssignMessage 政策會在 API Proxy 流程期間變更或建立新的要求和回應訊息。 你可以透過這項政策,對這類郵件執行下列動作:
使用 AssignMessage 政策時,通常會新增、變更或移除 要求或回應不過,您也可以使用 AssignMessage 政策建立自訂訊息 再將其傳送至替代目標,方法如 建立自訂要求訊息。
AssignMessage 政策可以使用下列子項建立或變更流程變數 元素:
<AssignMessage>
個元素
定義 AssignMessage 政策。
預設值 | 請參閱下方的預設政策分頁 |
是否必填? | 必填 |
類型 | 複雜物件 |
父項元素 | 不適用 |
子元素 |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
<AssignMessage>
元素使用下列語法:
語法
<AssignMessage>
元素使用下列語法:
<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>
預設政策
以下範例顯示新增 AssignMessage 政策時的預設設定 加入 Edge UI 中的流程:
<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>
當您在 Edge UI 中插入新的 AssignMessage 政策時,範本會包含所有使用者的虛設常式
以及可能有哪些作業一般而言,您會選取要使用此政策執行的作業
並移除其餘的子項元素舉例來說,如果您要執行複製作業,請使用
<Copy>
元素,然後從中移除 <Add>
、<Remove>
和其他子元素
以便閱讀。
此元素在所有政策中皆包含下列屬性:
屬性 | 預設 | 必填與否 | Description |
---|---|---|---|
name |
無 | 必要 |
政策的內部名稱。 或者,您也可以使用 |
continueOnError |
false | 選填 | 如果設為「false」,當政策失敗時會傳回錯誤。多數政策預期的行為如下。如果設為「true」,則在政策失敗後,仍會繼續執行流程。 |
enabled |
true | 選填 | 設為「true」即可強制執行政策。將政策設為「false」,即可「關閉」政策。即使政策已附加至流程,系統也不會強制執行這項政策。 |
async |
false | 已淘汰 | 這項屬性已淘汰。 |
下表概略說明
<AssignMessage>
:
子元素 | 必填與否 | 說明 |
---|---|---|
常見作業 | ||
<Add> |
選用 | 將資訊「至」由
<AssignTo> 元素。
|
<Copy> |
選用 | 從「source 」指定的訊息複製資訊
屬性為 <AssignTo> 元素指定的訊息物件。 |
<Remove> |
選用 | 從
<AssignTo> 元素。 |
<Set> |
選用 | 替換要求或回應中現有屬性值,該屬性值是由
<AssignTo> 元素。
|
其他子元素 | ||
<AssignTo> |
選用 | 指定要對哪些訊息執行 AssignMessage 政策。您可以使用 可以是新的自訂訊息 |
<AssignVariable> |
選用 | 為流程變數指派值。如果變數不存在
<AssignVariable> 即可建立該項目。 |
<IgnoreUnresolvedVariables> |
選用 | 判斷遇到未解析的變數時,處理程序是否停止。 |
下文各節將逐一說明這些子元素。
範例
下列範例說明一些使用「AssignMessage」政策的方式 政策:
1:新增標頭
以下範例會將標頭新增至
<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:移除酬載
以下範例使用 <Remove>
從回應中刪除酬載
元素:
<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:修改回覆
以下範例會在現有的回應物件中加入標頭,以修改該物件:
<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>
這個範例不會建立新訊息。而是會修改 加入 HTTP 標頭。
本範例省略 <AssignTo>
元素中的變數名稱,並指定
type
做為「回應」,這項政策會修改目標傳回的回應物件
伺服器
這項政策在回應訊息中新增的 HTTP 標頭衍生自變數 由 LookupCache 政策填入。因此,這個程式碼修改的回應訊息 指派訊息政策包含一個 HTTP 標頭,指出結果是否已 是否從快取中提取資料在回應中設定標頭有助於偵錯及 來排解問題
4:設定動態內容
您可以使用「指派訊息」,在回應酬載中嵌入動態內容; 也就是要求訊息
如要在 XML 酬載中嵌入邊緣流程變數,請以遞迴方式包裝指定變數
大括號,如下所示:{prefix.name}
。
以下範例會嵌入 user-agent
HTTP 標頭流量變數的值
在名為 User-agent
的 XML 元素中:
<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>
如果是 JSON 酬載,您可以使用 variablePrefix
插入變數,並
variableSuffix
屬性含有分隔符號字元,如下所示
範例:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
如需流程變數的完整清單,請參閱流程變數參考資料。
自雲端版本 16.08.17 起,您也可以使用大括號插入變數。
5:移除查詢參數
以下範例會從要求中移除 apikey
查詢參數:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
最佳做法是從要求中移除 apikey
查詢參數
使用 VerifyAPIKey 政策驗證使用者。這麼做可避免
將機密資訊從後端目標傳遞至後端目標。
6:設定/取得變數
以下範例使用三種「指派郵件」政策:
- 在要求中建立三個流程變數,使用靜態值
- 可在要求流程的第二個政策中以動態方式取得流程變數
- 設定在回應的酬載中
<!-- 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>
在第一項政策中,<AssignVariable>
元素會建立並設定三個
變數。每個 <Name>
元素都會指定
變數名稱,而 <Value>
指定了值。
第二個政策使用 <AssignVariable>
元素讀取值,並建立三個
新變數:
<!-- 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>
在第二個政策中,<Ref>
元素會參照來源變數。
和 <Name>
元素會指定新變數的名稱。如果變數
無法存取 <Ref>
元素所參照的值。您可以使用
由 <Value>
元素指定。
如要測試這組政策,請按照下列步驟操作:
- 在要求流程中新增政策 1 和 #2。請務必將政策 1 置於政策「之前」 #2.
- 在回應流程中新增第三個政策。
- 第三個政策會使用
<Set>
元素將變數加入回應。 下列範例會在回應中建構 XML 酬載,讓 Edge 傳回用戶端:<!-- 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>
請注意,在
<Set>
中存取流程變數的語法是包裝變數 大括號請務必將
<Payload>
元素的contentType
屬性設為 「application/xml」。 - 傳送要求至 API Proxy。例如:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
您也可以選擇透過
xmllint
等公用程式串連結果,以便 XML 會以適當的格式顯示:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
回應主體應如下所示:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7:取得服務呼叫回應標頭
在以下範例中,假設 API Proxy 要求包含 Service callout 政策,
而摘要回應包含多個同名的標頭
(Set-Cookie
)。假設服務呼叫的回應變數為預設變數
calloutResponse
,下列政策會取得第二個 Set-Cookie
標頭值。
<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>
如要列出「所有」標頭值,請改用下列變數:
{calloutResponse.header.Set-Cookie.values}
這個參考資料中的每個子元素都各有額外範例。如需更多範例,請參見 AssignMessage 範例 。
子元素參照
本節將說明 <AssignMessage>
的子元素。
<Add>
將資訊加入要求或回應中,由 <AssignTo>
指定
元素。
<Add>
元素會在訊息中新增屬性,但該訊息不存在於原始中
撰寫新的電子郵件訊息如要變更現有屬性的值,請使用 <Set>
元素。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 複雜類型 |
父項元素 |
<AssignMessage>
|
子元素 |
<FormParams> <Headers> <QueryParams> |
<Add>
元素使用下列語法:
語法
<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>
範例 1
以下範例使用 <FormParams>
元素取得
三個查詢字串參數,並將這些參數設為
目標端點要求:
<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>
範例 2
以下範例使用 <Headers>
元素
目標端點要求的 User-Agent
標頭:
<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>
範例 3
以下範例使用 <QueryParams>
元素新增單一查詢
參數,並在要求中填入靜態值:
<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>
這個範例在要求預先流程中使用 <Add>
。如果您是在工具中查看結果
追蹤工具,也就是向「http://httpbin.org/get」發出的要求變成
"http://httpbin.org/get?myParam=42".
<Add>
的子元素支援動態字串替代,也就是
訊息範本。
<FormParams>
(<Add>
的子項)
在要求訊息中加入新的表單參數。這個元素對回應沒有影響 撰寫新的電子郵件訊息
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <FormParam> 元素陣列 |
父項元素 |
<Add>
|
子元素 |
<FormParam> |
<FormParams>
元素使用下列語法:
語法
<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>
範例 1
以下範例會將單一表單參數 (「answer」) 和靜態值 (「42」) 加入 要求:
<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>
範例 2
以下範例會取得 name
查詢字串參數的值,並
即可將回應新增至請求做為表單參數:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
請注意,本範例不會指定使用 <AssignTo>
的目標。這項政策會將
參數。
範例 3
以下範例會在要求中加入多個表單參數:
<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>
這個範例會從來源要求取得查詢字串參數,並將參數加到 做為形式參數,傳送至傳送至目標端點的要求。
您可以使用追蹤記錄工具查看流程。您會看到要求內容的主體 包含網址編碼表單資料,資料最初是以查詢字串傳遞 參數:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
您必須符合下列條件,才能使用 <FormParams>
:
- HTTP 動詞:POST
- 訊息類型:要求
- 下列一個 (或兩者皆有):
- 表單資料:設為某個值或「」(空字串)。舉例來說
curl
,請在要求中加入-d ""
。 Content-Length
標頭:設為 0 (如果目的地中沒有資料, 原始要求;如果沒有,則目前長度,以位元組為單位)。舉例來說 「curl
」會在你的要求中加入-H "Content-Length: 0"
。
- 表單資料:設為某個值或「」(空字串)。舉例來說
例如:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
新增 <FormParams>
時,Edge 會將要求的 Content-Type
標頭設為
"application/x-www-form-urlencoded"然後再傳送訊息至目標服務。
<Headers>
(<Add>
的子項)
新增標頭至指定的要求或回應,而該要求是由
<AssignTo>
元素。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <Header> 元素陣列 |
父項元素 |
<Add>
|
子元素 |
<Header> |
<Headers>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
範例 1
以下範例會在要求訊息中加入 user-agent
標頭,並且
將 request.user.agent
資料流變數的值指派給該標頭。
<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>
(<Add>
的子項)
在請求中加入新的查詢參數。這個元素不會對回應產生任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <QueryParam> 元素陣列 |
父項元素 |
<Add>
|
子元素 |
<QueryParam> |
<QueryParams>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
範例 1
以下範例會加入查詢參數「myParam」並指定其值 「42」加入:
<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>
您必須符合下列條件,才能使用 <QueryParams>
:
- HTTP 動詞:GET
- 訊息類型:要求
此外,您只能設定 <AssignTo>
元素的
type
屬性是要求訊息。如果在回覆上設定這些參數,就不會有任何作用。
如果您在政策中定義了空白的查詢參數陣列
(<Add><QueryParams/></Add>
),這項政策不會新增任何查詢
參數。這與省略 <QueryParams>
相同。
<AssignTo>
決定 AssignMessage 政策針對哪個物件進行操作。可採用的選項包括:
請注意,在某些情況下,您無法變更 AssignMessage 政策執行的物件。
舉例來說,您無法使用 <Add>
或 <Set>
新增或變更查詢參數
(<QueryParams>
) 或表單參數 (<FormParams>
)。只有在
操控請求的查詢參數和 form 參數。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<AssignMessage>
|
子元素 | 無 |
如果未指定 <AssignTo>
,政策會對預設的要求或回應執行。
以政策執行位置為準如果政策在要求流程中執行,
則會影響要求訊息。如果在回應流程中執行,政策會影響回應
根據預設。
<AssignTo>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
範例 1
以下範例會指定,目標就是會傳送至 目標端點:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
將 createNew
設為「false」,此範例不會
這項政策中的所有作業都會影響原始要求。
範例 2
以下範例會建立新的要求物件:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
建立新的要求或回應物件時,AssignMessage 政策的其他元素
政策 (例如 <Add>
、<Set>
和 <Set>
) 都會根據新政策
物件物件。
您可以在流程中稍後在其他政策中存取新的要求物件,或傳送新的要求物件 使用服務呼叫政策,向外部服務要求物件。
範例 3
以下範例建立名為「MyRequestObject」的新要求物件:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
建立新的要求或回應物件時,AssignMessage 政策的其他元素
政策 (例如 <Add>
、<Set>
和 <Set>
) 都會根據新政策
物件物件。
您可以在流程中稍後在其他政策中存取新的要求物件,或傳送新的要求物件 使用服務呼叫政策,向外部服務要求物件。
下表說明 <AssignTo>
的屬性:
屬性 | 說明 | 必填與否 | 類型 |
---|---|---|---|
createNew |
決定這項政策在指派值時是否要建立新訊息。 如果值為「true」,則政策會建立一個類型的新變數
如果值為「false」,則政策會以下列兩種方式之一回應:
如未指定
|
選用 | 布林值 |
transport |
指定要求或回應訊息類型的傳輸類型。 預設值為「http」。(唯一支援的值)。 |
選用 | 字串 |
type |
指定新訊息的類型 (當 createNew 為「true」時)。有效
值為「request」或「response」
預設值為「request」。如果您省略這個屬性,則 Edge 會建立 要求或回應,視這項政策執行的流程中的哪個位置而定。 |
選用 | 字串 |
<AssignVariable>
為目的地流程變數指派值 (例如,
assignMessage 政策)。如果流程變數不存在,<AssignVariable>
會建立
基礎架構
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 複雜類型 |
父項元素 |
<AssignMessage>
|
子元素 |
<Name> (必填)<Ref> <Template> <Value> |
您指派給目的地流程變數的值可以是下列其中一種:
- 常值字串:使用
<Value>
子項元素指定常值 字串值。 - 流程變數:使用
<Ref>
子元素來指定 目的地流程變數的現有流程變數。完整的流程清單 可做為來源的變數,請參閱流程變數參考資料。 - 訊息範本:使用
<Template>
子元素指定 「訊息範本」 目的地流程變數。
<AssignVariable>
元素使用下列語法:
語法
<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>
使用 <Ref>
元素指定來源變數。如果
無法存取 <Ref>
所參照的變數,Edge 會使用這個值
<Value>
元素所指定的屬性。如果您要定義
<Template>
,其優先順序高於其他子元素。
範例 1
以下範例將新變數 myvar
的值設為常值
值「42」:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
範例 2
以下範例會指派流程變數的值
將 request.header.user-agent
傳送至目的地流程變數 myvar
查詢參數 country
的值和目的地流程變數
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>
如果其中一項指派失敗,Edge 會改為指派「ErrorOnCopy」值到 目的地流程變數
如果 myvar
或 Country
流程變數不存在,
<AssignVariable>
會建立這些物件。
範例 3
以下範例使用 <Template>
子項元素,用於串連兩個結構定義變數
,中間是連字號字串 (連字號):
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<AssignVariable>
的常見用途是為查詢參數、標頭或
與要求一併傳遞的其他值。方法是結合使用
<Ref>
和 <Value>
子元素。如要
資訊,請參閱 <Ref>
的範例。
<Name>
(<AssignVariable>
的子項)
指定目的地流程變數的名稱 (例如,將變數值設定為
指派訊息政策)。如果 <AssignVariable>
中指定的變數不存在,
政策會以該名稱建立資源
預設值 | 不適用 |
是否必填? | 必填 |
類型 | 字串 |
父項元素 |
<AssignVariable>
|
子元素 | 無 |
<Name>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
範例 1
以下範例將目的地變數指定為 myvar
,並設為該變數
轉換為常值「42」:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
如果 myvar
不存在,<AssignVariable>
會加以建立。
<Ref>
(<AssignVariable>
的子項)
以流程變數的形式指定指派來源。流程變數可以是 預先定義的流程變數 (如流程變數參考資料中列出的項目) 或自訂流程變數 每個專案的名稱
一律會將 <Ref>
的值解讀為資料流變數。你無法
會將常值字串指定為
值。如要指派常值字串值,請使用 <Value>
元素
。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<AssignVariable>
|
子元素 | 無 |
當您使用 <Ref>
指定資料流變數時,請省略
方括號「{}」您慣用的流程來參照流程變數例如:
將新變數的值設為 client.host
資料流的值
變數:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
如要定義目的地流程變數的預設值,請使用 <Value>
結合 <Ref>
如果 Pod 所指定的流量變數
<Ref>
不存在、無法讀取,或為空值,則 Edge 會指派該值
傳送至目的地流程變數的 <Value>
。
<Ref>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
範例 1
以下範例會指派流程變數的值
將 request.header.user-agent
傳送至目的地流程變數 myvar
,
將查詢參數 country
的值設為 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>
在這個範例中,Edge 並未為下列項目指定預設值 (或備用值) 作業。
範例 2
以下範例會指派流程變數 request.header.user-agent
的值
目的地流程變數 myvar
和值
,country
加入 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>
在本例中,如果 request.header.user-agent
流程變數的值
或 Country
查詢參數為空值、無法讀取或格式錯誤,Edge 指派
值「ErrorOnCopy」對應至新的變數
範例 3
<AssignVariable>
的常見用途是設定查詢的預設值
參數、標頭或其他可隨要求傳遞的值。舉例來說
天氣 API Proxy,該要求會使用名為「w」的單一查詢參數。這個
參數包含要查詢天氣的城市 ID。要求網址
表單:
http://myCO.com/v1/weather/forecastrss?w=city_ID
如要定義「w」的預設值,請建立 AssignMessage 政策,例如 包括:
<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>
在這個範例中,<AssignVariable>
會取得 request.queryparam.w
的值。
並指派給自己如果流量變數為空值,表示「w」查詢參數之前為
未加入的內容,本例會使用
<Value>
元素。因此,您可以向這個 API 提出要求
Proxy 中省略「w」的查詢參數:
http://myCO.com/v1/weather/forecastrss
...而且 API Proxy 會傳回有效的結果。
與使用 <Value>
時不同,<Ref>
的值必須是
流程變數,例如 request
、response
的屬性或
target
物件。此值也可以是您建立的自訂流程變數。
如果您為 <Ref>
的值指定不存在的資料流變數,
<IgnoreUnresolvedVariables>
的值為「true」,Edge 會擲回錯誤。
<Template>
(<AssignVariable>
的子項)
指定 訊息範本。訊息 範本可讓您在執行政策時執行變數字串替換。 可以將常值字串與以大樣式包裝的變數名稱結合 大括號除此之外 支援 函式,例如逸出和大小寫轉換。
使用 ref
屬性指定流程變數,這個變數的值
是一個訊息範本例如,您可以將訊息範本儲存為
自訂屬性
是開發人員的應用程式Edge 在驗證 API 金鑰後識別開發人員應用程式
或安全性權杖 (透過額外政策)、<AssignVariable>
元素可以使用應用程式自訂屬性中的訊息範本,
視為流程變數。以下範例假設訊息
這個範本位於名為 message_template
的客戶屬性中
發出 API 呼叫的開發人員應用程式,其中 VerifyAPIKey 政策用於驗證
應用程式的 API 金鑰:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<AssignVariable>
|
子元素 | 無 |
<Template>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
範例 1
下例使用訊息範本語法來串連兩個結構定義變數 ,中間是連字號字串 (連字號):
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
範例 2
以下範例會指定流程變數,其中變數的值 是預先定義的訊息範本如果您想要在 插入預先定義的範本,請使用此選項 而且不必修改政策:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
範例 3
以下範例會指定流程變數和文字值。在這個範例中
參照的變數不是空值,所以系統會使用該值做為範本。如果參照的
值為空值,接著文字值 (在本例中為 {system.uuid}-{messageid}
)
就會當做範本這個模式有助於提供「覆寫」值,其中
在某些情況下,您想用值覆寫預設範本 (文字部分)
動態設定例如,條件陳述式可能會擷取值
然後將參照的變數設為該值:
<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>
(<AssignVariable>
的子項)
定義使用 <AssignVariable>
設定的目的地流程變數值。
值一律會被解譯為常值字串;您不能使用流程變數做為值
以方括號包住值 (「{}」)。如要使用資料流變數,請使用 <Ref>
。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<AssignVariable>
|
子元素 | 無 |
與 <Ref>
元素搭配使用時,<Value>
做為預設 (或備用) 值。如未指定 <Ref>
,
無法解析或為空值,則會使用 <Value>
的值。
<Value>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
範例 1
以下範例會設定目的地流程變數 myvar
的值。
轉換為常值「42」:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
範例 2
以下範例會指派流程變數的值
將 request.header.user-agent
傳送至資料流變數 myvar
和值
,country
加入 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>
如果其中一項指派失敗,<AssignVariable>
會改為指派「ErrorOnCopy」值到
目的地流程變數
<Copy>
從「來自」source
屬性指定的訊息複製值
「傳送至」,這是 <AssignTo>
元素指定的訊息。如未指定
含有 <AssignTo>
的目標,這項政策會將值複製到要求或回應,
視這項政策執行流程中的位置而定。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<AssignMessage>
|
子元素 |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
<Copy>
元素使用下列語法:
語法
<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>
範例 1
以下範例會複製標頭、三個表單參數、路徑和所有查詢 參數從請求到新的自訂要求:
<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>
<Copy>
元素的屬性如下:
屬性 | 說明 | 必填與否 | 類型 |
---|---|---|---|
來源 |
指定副本的來源物件。
|
選用 | 字串 |
<FormParams>
(<Copy>
的子項)
從
將 <Copy>
元素的 source
屬性「傳送到」要求
是由 <AssignTo>
元素所指定。這個元素不會影響
回應。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <FormParam> 元素陣列或空白陣列 |
父項元素 |
<Copy>
|
子元素 |
<FormParam> |
<FormParams>
元素使用下列語法:
語法
<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>
範例 1
以下範例會將要求中的單一表單參數複製到 自訂要求「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>
範例 2
以下範例會將所有表單參數複製到自訂要求 "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
範例 3
以下範例會將三個表單參數複製到自訂要求 "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>
示例 4
如果有多個表單參數的名稱相同,請使用以下語法:
<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>
此範例複製了「f1」、「f2」和第二個值「f3」。如果為「f3」只有一個 值,系統就不會複製這個值。
您必須符合下列條件,才能使用 <FormParams>
:
- HTTP 動詞:POST
- 訊息類型:回覆
- 下列一個 (或兩者皆有):
- 表單資料:設為某個值或「」(空字串)。舉例來說
curl
,請在要求中加入-d ""
。 Content-Length
標頭:設為 0 (如果目的地中沒有資料, 原始要求;否則目前長度舉例來說 「curl
」會在你的要求中加入-H "Content-Length: 0"
。
- 表單資料:設為某個值或「」(空字串)。舉例來說
複製 <FormParams>
時,<Copy>
會將訊息的 Content-Type
設為
"application/x-www-form-urlencoded"然後再傳送訊息至目標服務。
<Headers>
(<Copy>
的子項)
從「從」要求或回應訊息指定的要求或回應訊息中複製 HTTP 標頭
將 <Copy>
元素的 source
屬性「傳送至」要求
<AssignTo>
元素所指定的或回應訊息。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <Header> 元素陣列或空白陣列 |
父項元素 |
<Copy>
|
子元素 |
<Header> |
<Headers>
元素使用下列語法:
語法
<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>
範例 1
以下範例會將要求中的 user-agent
標頭複製到
新的自訂要求物件:
<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>
範例 2
如要複製所有標頭,請使用空白的 <Headers>
元素,如以下範例所示
顯示:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
範例 3
如果有多個相同名稱的標頭,請使用以下語法:
<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>
此範例複製「h1」、「h2」和第二個值「h3」。如果輸入「h3」只有一個 值,系統就不會複製這個值。
<Path>
(<Copy>
的子項)
決定是否應從來源要求複製到目的地的路徑 請求。這個元素不會對回應產生任何影響。
如果值為「true」,這項政策會從
將 <Copy>
元素的 source
屬性「傳送至」要求
訊息是由 <AssignTo>
元素指定。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<Path>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
範例 1
以下範例表示 AssignMessage 政策應從來源複製路徑 要求新的自訂要求物件:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
您必須符合下列條件,才能使用 <Path>
:
- 訊息類型:要求
<Payload>
(<Copy>
的子項)
決定是否應將酬載從來源複製到目的地。 來源和目的地可以是要求或回應。
如果值為「true」,這項政策會從
<Copy>
元素的 source
屬性至訊息
是由 <AssignTo>
元素所指定。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<Payload>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
範例 1
以下範例將 <Payload>
設為「true」這樣要求酬載
從要求複製到回應:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(<Copy>
的子項)
將「從」指定的要求複製查詢字串參數,
<Copy>
元素的 source
屬性「傳送至」指定的要求
<AssignTo>
元素。這個元素不會對回應產生任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <QueryParam> 元素陣列或空白陣列 |
父項元素 |
<QueryParam>
|
子元素 | 無 |
<QueryParams>
元素使用下列語法:
語法
<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>
範例 1
以下範例複製「my_param」改為新的 自訂要求物件:
<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>
範例 2
以下範例會將請求中的所有查詢參數複製到新的自訂項目 要求物件:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
範例 3
如果有多個名稱相同的查詢參數,請使用以下語法:
<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>
此範例複製「qp1」、「qp2」和「qp3」的第二個值。如果「qp3」只有 這個值就不會複製
您必須符合下列條件,才能使用 <QueryParams>
:
- HTTP 動詞:GET
- 訊息類型:要求
<ReasonPhrase>
(<Copy>
的子項)
決定是否應從來源回應複製原因詞組到 目的地回應這個元素對要求沒有任何影響。
如果為「true」,這項政策就會「從」回應複製 ReasonPhrase
是由 <Copy>
元素的 source
屬性指定「對應至」回應
是由 <AssignTo>
元素指定。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<ReasonPhrase>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
範例 1
以下範例將 <ReasonPhrase>
設為「true」,導致 <Copy>
將原因詞組從預設回應複製到自訂回應物件:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
您必須符合下列條件,才能使用 <ReasonPhrase>
:
- 訊息類型:回覆
<StatusCode>
(<Copy>
的子項)
決定是否將狀態碼從來源回應複製到目的地 回應。這個元素對要求沒有任何影響。
如果為「true」,這項政策會「從」指定的回應訊息指定的回應訊息中複製狀態碼
將 <Copy>
元素的 source
屬性「傳送至」回應
訊息是由 <AssignTo>
元素指定。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<StatusCode>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
範例 1
以下範例會將 <StatusCode>
設為「true」,用來複製狀態碼
從預設回應物件變更為新的自訂回應物件:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
您必須符合下列條件,才能使用 <StatusCode>
:
- 訊息類型:回覆
<StatusCode>
的常見用途,是確保 Proxy 回應的狀態相同
因為 <AssignTo>
的 createNew
時從目標接收的回應中
屬性設為「true」。
<Verb>
(<Copy>
的子項)
判斷 HTTP 動詞是否從來源要求複製到目的地 請求。這個元素不會對回應產生任何影響。
如果為「true」,則複製 <Copy>
元素 source
屬性中的動詞
加到 <AssignTo>
元素中指定的要求。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<Verb>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
範例 1
下列範例將 <Verb>
設為「true」,後者會從
改為新的自訂要求:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
您必須符合下列條件,才能使用 <Verb>
:
- 訊息類型:要求
<Version>
(<Copy>
的子項)
決定是否將 HTTP 版本從來源要求複製到 目的地要求。這個元素不會對回應產生任何影響。
如果設為「true」,系統會複製 <Copy>
元素的 source
屬性中找到的 HTTP 版本
設為 <AssignTo>
元素指定的物件。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Copy>
|
子元素 | 無 |
<Version>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
範例 1
以下範例將 <Version>
設為「true」並複製
版本從預設要求物件變更為新的自訂要求物件:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
您必須符合下列條件,才能使用 <Version>
:
- 訊息類型:要求
<DisplayName>
除 name
屬性外,一併使用
管理 UI Proxy 編輯器,使用不同的自然名稱。
<DisplayName>
元素適用於所有政策。
預設值 | 不適用 |
是否必填? | 選用設定。如果您省略 <DisplayName> ,
使用政策的 name 屬性 |
類型 | 字串 |
父項元素 | <PolicyElement> |
子元素 | 無 |
<DisplayName>
元素使用下列語法:
語法
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
範例
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName>
元素不含任何屬性或子元素。
<IgnoreUnresolvedVariables>
判斷遇到未解析的變數時,處理程序是否停止。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<AssignMessage>
|
子元素 | 無 |
設為 true
即可忽略未解析的變數並繼續處理;否則
false
。預設值為 false
。
將「<IgnoreUnresolvedVariables>
」設為 true
的做法與設定
「<AssignMessage>
」的 continueOnError
至 true
,因為這是專屬於
及取得變數值將 continueOnError
設為
true
,則 Edge 會忽略所有錯誤,而不只是使用
變數。
<IgnoreUnresolvedVariables>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
範例 1
以下範例會將 <IgnoreUnresolvedVariables>
設為「true」:
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
移除標頭、查詢參數、表單參數和/或郵件酬載,
一則訊息訊息可以是要求或回應。你指定哪則訊息「<Remove>
」
<AssignTo>
元素的處理方法。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 複雜類型 |
父項元素 |
<AssignMessage>
|
子元素 |
<FormParams> <Headers> <Payload> <QueryParams> |
<Remove>
的常見用途是刪除含有敏感內容的查詢參數
來自傳入要求物件的資訊,以避免傳遞至後端伺服器。
<Remove>
元素使用下列語法:
語法
<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>
範例 1
以下範例會從回應中移除訊息內文:
<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>
在回應流程中,這項政策會移除回應主體,只傳回 HTTP 標頭傳送給用戶端
範例 2
以下範例會從傳入的資料中移除所有表單參數和查詢參數 要求:
<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>
(<Remove>
的子項)
從要求中移除指定表單參數。這個元素不會影響 回應。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <FormParam> 元素陣列或空白陣列 |
父項元素 |
<Remove>
|
子元素 |
<FormParam> |
<FormParams>
元素使用下列語法:
語法
<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>
範例 1
以下範例會從要求中移除三個表單參數:
<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>
範例 2
以下範例會從要求中移除所有表單參數:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
範例 3
如果有多個表單參數的名稱相同,請使用以下語法:
<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>
此範例會移除「f1」、「f2」和第二個值「f3」。如果為「f3」只有一個 值,系統就不會移除。
您必須符合下列條件,才能使用 <FormParams>
:
- 訊息類型:要求
Content-Type
:「application/x-www-form-urlencoded」
<Headers>
(<Remove>
的子項)
從要求或回應中移除指定的 HTTP 標頭 (由
<AssignTo>
元素。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <Header> 元素陣列或空白陣列 |
父項元素 |
<Remove>
|
子元素 |
<Header> |
<Headers>
元素使用下列語法:
語法
<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>
範例 1
以下範例會從要求中移除 user-agent
標頭:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
範例 2
以下範例會從要求中移除所有標頭:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
範例 3
如果有多個相同名稱的標頭,請使用以下語法:
<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>
此範例會移除「h1」、「h2」和第二個值「h3」。如果輸入「h3」 只有一個值,系統不會移除該值。
<Payload>
(<Remove>
的子項)
決定 <Remove>
是否要刪除要求或回應中的酬載,
<AssignTo>
元素所指定的屬性。設為「true」到
清除酬載;否則為「false」。預設值是「false」。
預設值 | 否 |
是否必填? | 選用 |
類型 | 布林值 |
父項元素 |
<Remove>
|
子元素 | 無 |
<Payload>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
範例 1
以下範例將 <Payload>
設為「true」這樣要求酬載
已清除:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(<Remove>
的子項)
從要求中移除指定的查詢參數。這個元素不會影響 回應。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <QueryParam> 元素陣列或空白陣列 |
父項元素 |
<Remove>
|
子元素 |
<QueryParam> |
<QueryParams>
元素使用下列語法:
語法
<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>
範例 1
以下範例會從要求中移除單一查詢參數:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
範例 2
以下範例會從要求中移除所有查詢參數:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
範例 3
如果有多個名稱相同的查詢參數,請使用以下語法:
<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>
此範例會移除「qp1」、「qp2」和第二個值「qp3」。如果 「qp3」只有一個值,系統不會移除該值。
示例 4
以下範例會從要求中移除 apikey
查詢參數:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
您必須符合下列條件,才能使用 <QueryParams>
:
- HTTP 動詞:GET
- 訊息類型:要求
<Set>
設定要求或回應訊息中的資訊,由
<AssignTo>
元素。<Set>
會覆寫標頭或
。如要建立新的標頭或參數,請使用
<Add>
元素。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 複雜類型 |
父項元素 |
<AssignMessage>
|
子元素 |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
<Set>
元素使用下列語法:
語法
<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>
範例 1
以下是 <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>
(<Set>
的子項)
覆寫要求中的現有表單參數,並以您產生的新值取代這些參數 您會透過這個元素 進行指定這個元素不會對回應產生任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <FormParam> 元素陣列 |
父項元素 |
<Set>
|
子元素 |
<FormParam> |
<FormParams>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
範例 1
以下範例會設定名為「myparam」的表單參數設為
新自訂要求中的 request.header.myparam
變數:
<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>
您必須符合下列條件,才能使用 <FormParams>
:
- HTTP 動詞:POST
- 訊息類型:要求
如果您在政策中定義了空白的表單參數
(<Add><FormParams/></Add>
),這項政策不會新增任何表單
參數。這與省略 <FormParams>
相同。
<Set>
會將訊息的 Content-Type
變更為
"application/x-www-form-urlencoded"然後再傳送至目標端點
<Headers>
(<Set>
的子項)
覆寫要求或回應中的現有 HTTP 標頭 (由
<AssignTo>
元素。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <Header> 元素陣列 |
父項元素 |
<Set>
|
子元素 |
<Header> |
<Headers>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
範例 1
下列範例會將 user-agent
標頭設為
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>
如果您在政策中定義了空白標頭
(<Add><Headers/></Add>
),政策不會新增任何標頭。這個
等同於省略 <Headers>
。
<Path>
(<Set>
的子項)
<Payload>
(<Set>
的子項)
定義要求或回應的訊息內文;由
<AssignTo>
元素。酬載可以是任何有效的內容類型,例如純文字
文字、JSON 或 XML
預設值 | 空字串 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<Set>
|
子元素 | 無 |
<Payload>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
範例 1
下列範例會設定純文字酬載:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
範例 2
下列範例會設定 JSON 酬載:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
範例 3
以下範例會包裝變數名稱,將變數值插入酬載 大括號:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
在較舊版本的 Apigee Edge 中 (例如雲端版本 16.08.17 之前),
不要使用大括號來表示 JSON 酬載中的變數參照。在這些版本中
需要使用 variablePrefix
和 variableSuffix
屬性
並指定分隔符號字元,並使用這些字元來納入變數名稱,如下所示:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
這個舊版語法仍然有效。
示例 4
系統會將 <Payload>
的內容視為訊息範本。也就是說,
AssignMessage 政策會將大括號括住的變數替換為
在執行階段中參照的變數
以下範例使用大括號語法將部分酬載設為 變數值:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
下表說明 <Payload>
的屬性:
屬性 | 說明 | 存在必要性 | 類型 |
---|---|---|---|
contentType |
如果有指定, |
選用 | 字串 |
variablePrefix |
視需要指定資料流變數中的前置分隔符號。預設為「{」。適用對象 詳情請參閱流程變數參考資料。 | 選用 | 雜雜 |
variableSuffix |
視需要指定資料流變數的結尾分隔符號。預設為 "}。適用對象 詳情請參閱流程變數參考資料。 | 選用 | 雜雜 |
<QueryParams>
(<Set>
的子項)
使用新值覆寫要求中現有的查詢參數。這個元素沒有效果 回應。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | <QueryParam> 元素陣列 |
父項元素 |
<Set>
|
子元素 |
<QueryParam> |
<QueryParams>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
範例 1
以下範例會設定「地址」參數改為
request.header.address
變數:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
您必須符合下列條件,才能使用 <QueryParams>
:
- HTTP 動詞:GET
- 訊息類型:要求
如果您在政策中定義了空白的查詢參數
(<Set><QueryParams/></Set>
),這項政策不會設定任何查詢
參數。這與省略 <QueryParams>
相同。
<ReasonPhrase>
(<Set>
的子項)
設定回應中的原因詞組。這通常是在與
<StatusCode>
。這個元素對要求沒有任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串 |
父項元素 |
<Set>
|
子元素 | 無 |
<ReasonPhrase>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
範例 1
下列範例定義簡單的原因語句:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
範例 2
系統會將 <ReasonPhrase>
的內容視為訊息範本。也就是說
使用大括號括住的變數名稱會在執行階段替換成
參照的變數,如以下範例所示:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
您必須符合下列條件,才能使用 <ReasonPhrase>
:
- 訊息類型:回覆
<StatusCode>
(<Set>
的子項)
設定回應的狀態碼。這個元素對要求沒有任何影響。
預設值 | 「200」(當 <AssignTo> 的 createNew 屬性時
設為「true」) |
是否必填? | 選用 |
類型 | 字串或 variable |
父項元素 |
<Set>
|
子元素 | 無 |
<StatusCode>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
範例 1
以下範例會設定簡單的狀態碼:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
範例 2
系統會將 <StatusCode>
的內容視為訊息範本。也就是說
使用大括號括住的變數名稱在執行階段中,會替換成
參照的變數,如以下範例所示:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
您必須符合下列條件,才能使用 <StatusCode>
:
- 訊息類型:回覆
<Verb>
(<Set>
的子項)
設定要求的 HTTP 動詞。這個元素不會對回應產生任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串或 variable |
父項元素 |
<Set>
|
子元素 | 無 |
<Verb>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
範例 1
下列範例會針對要求設定簡單的動詞:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
範例 2
系統會將 <Verb>
的內容視為訊息範本。這代表變數名稱
系統在執行階段將以大括號包住的值取代為參照的值
變數。
以下範例使用變數填入動詞:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
您必須符合下列條件,才能使用 <Verb>
:
- 訊息類型:要求
<Version>
(<Set>
的子項)
設定要求的 HTTP 版本。這個元素不會對回應產生任何影響。
預設值 | 不適用 |
是否必填? | 選用 |
類型 | 字串或 variable |
父項元素 |
<Set>
|
子元素 | 無 |
<Version>
元素使用下列語法:
語法
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
範例 1
以下範例會將版本號碼設定為「1.1」:
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
範例 2
下列指令會在大括號中使用變數設定版本號碼:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
系統會將 <Version>
的內容視為訊息範本。也就是說
執行階段中以大括號包住的變數名稱,將替換成參照的值
變數。
您必須符合下列條件,才能使用 <Version>
:
- 訊息類型:要求
以下範例會使用「Assign Message」(指派訊息) 建立自訂要求物件:
<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>
這個範例:
- 建立名為「MyCustomRequest」的新要求訊息物件。
- 在 MyCustomRequest 上,這項政策:
- 從傳入流量複製
user-agent
HTTP 標頭的值 要求接收新訊息。因為<Copy>
使用user-agent
流程變數,沒有 您必須將source
屬性指定為<Copy>
。 - 將自訂訊息的
address
查詢參數設為 傳入要求的addy
查詢參數 - 將 HTTP 動詞設為
GET
。
- 從傳入流量複製
- 將
<IgnoreUnresolvedVariables>
設為「false」。時間:<IgnoreUnresolvedVariables>
為「false」,如果政策嘗試新增的其中一個變數不存在,Edge 會停止 在 API 流程中處理的資料
範例 2
以下另一個範例示範如何使用「指派」功能建立自訂要求物件 訊息:
<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>
本例會建立名為「partner.request」的新自訂要求。然後它會設定
新要求:<Verb>
和 <Payload>
。