คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
อะไร
นโยบาย AssignMessage จะเปลี่ยนหรือสร้างข้อความคำขอและการตอบกลับใหม่ในระหว่างโฟลว์ของพร็อกซี API นโยบายนี้ช่วยให้คุณดำเนินการต่อไปนี้กับข้อความเหล่านั้นได้
- เพิ่มพารามิเตอร์แบบฟอร์ม ส่วนหัว หรือพารามิเตอร์การค้นหาใหม่ลงในข้อความ
- คัดลอกพร็อพเพอร์ตี้ที่มีอยู่จากข้อความหนึ่งไปยังอีกข้อความหนึ่ง
- นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดของข้อความ ออกจากข้อความ
- ตั้งค่าพร็อพเพอร์ตี้ที่มีอยู่ในข้อความ
โดยปกติแล้ว คุณจะใช้ 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 ลงในโฟลว์ใน UI ของ 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>
เมื่อคุณแทรกนโยบาย AssignMessage ใหม่ใน UI ของ Edge เทมเพลตจะมี Stub สำหรับการดำเนินการที่เป็นไปได้ทั้งหมด
โดยปกติแล้ว คุณจะเลือกการดำเนินการที่ต้องการทำกับนโยบายนี้
และนำองค์ประกอบย่อยที่เหลือออก เช่น หากต้องการดำเนินการคัดลอก ให้ใช้เอลิเมนต์
<Copy>
และนำ <Add>
, <Remove>
และองค์ประกอบย่อยอื่นๆ ออกจาก
นโยบายเพื่อให้สามารถอ่านได้ง่ายขึ้น
องค์ประกอบนี้มีแอตทริบิวต์ต่อไปนี้ซึ่งมักใช้กับนโยบายทั้งหมด
แอตทริบิวต์ | ค่าเริ่มต้น | จําเป็นไหม | คำอธิบาย |
---|---|---|---|
name |
ไม่มีข้อมูล | จำเป็น |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ ใช้องค์ประกอบ |
continueOnError |
เท็จ | ไม่บังคับ | ตั้งค่าเป็น "false" เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทํางานที่คาดหวังตามนโยบายส่วนใหญ่ ตั้งค่าเป็น "จริง" เพื่อดําเนินการโฟลว์ข้อมูลต่อไป แม้ว่านโยบายจะล้มเหลวก็ตาม |
enabled |
จริง | ไม่บังคับ | ตั้งค่าเป็น "true" เพื่อบังคับใช้นโยบาย ตั้งค่าเป็น "false" เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังคงแนบไปกับโฟลว์ |
async |
เท็จ | เลิกใช้ | แอตทริบิวต์นี้เลิกใช้งานแล้ว |
ตารางต่อไปนี้แสดงคำอธิบายระดับสูงขององค์ประกอบย่อยของ
<AssignMessage>
องค์ประกอบย่อย | จำเป็นหรือไม่ | คำอธิบาย |
---|---|---|
การดำเนินการทั่วไป | ||
<Add> |
ไม่บังคับ | เพิ่มข้อมูลลงในออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ
<AssignTo>
|
<Copy> |
ไม่บังคับ | คัดลอกข้อมูลจากข้อความที่ระบุโดยแอตทริบิวต์ source
ไปยังออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ <AssignTo> |
<Remove> |
ไม่บังคับ | ลบองค์ประกอบที่ระบุออกจากตัวแปรข้อความที่ระบุในองค์ประกอบ
<AssignTo> |
<Set> |
ไม่บังคับ | แทนที่ค่าของพร็อพเพอร์ตี้ที่มีอยู่ในการขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>
|
องค์ประกอบย่อยอื่นๆ | ||
<AssignTo> |
ไม่บังคับ | ระบุข้อความที่นโยบาย AssignMessage ดำเนินการ ซึ่งอาจเป็นคำขอหรือการตอบกลับมาตรฐาน หรืออาจเป็นข้อความใหม่ที่กำหนดเองก็ได้ |
<AssignVariable> |
ไม่บังคับ | กำหนดค่าให้กับตัวแปรโฟลว์ หากไม่มีตัวแปร ระบบจะ
<AssignVariable> สร้างตัวแปร |
<IgnoreUnresolvedVariables> |
ไม่บังคับ | กำหนดว่าจะหยุดการประมวลผลเมื่อพบตัวแปรที่ยังไม่ได้แก้ไขหรือไม่ |
เราจะอธิบายองค์ประกอบย่อยแต่ละรายการเหล่านี้ในส่วนต่อไป
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณใช้ AssignMessage Policy ได้
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
เป็น "response" นโยบายนี้จึงแก้ไขออบเจ็กต์การตอบกลับที่เซิร์ฟเวอร์เป้าหมายส่งคืน
ส่วนหัว HTTP ที่นโยบายนี้เพิ่มลงในข้อความตอบกลับได้มาจากตัวแปร ที่สร้างขึ้นโดยนโยบาย LookupCache ดังนั้นข้อความตอบกลับที่แก้ไขโดยนโยบาย Assign Message นี้จะมีส่วนหัว HTTP ที่ระบุว่าดึงผลลัพธ์จากแคชหรือไม่ การตั้งค่าส่วนหัวในการตอบกลับจะเป็นประโยชน์สำหรับการแก้ไขข้อบกพร่องและ การแก้ปัญหา
4: ตั้งค่าเนื้อหาแบบไดนามิก
คุณสามารถใช้ Assign Message เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของข้อความตอบกลับและ ข้อความคำขอได้
หากต้องการฝังตัวแปรโฟลว์ Edge ในเพย์โหลด XML ให้ครอบตัวแปรที่กำหนดด้วยวงเล็บปีกกา
ดังนี้ {prefix.name}
ตัวอย่างต่อไปนี้ฝังค่าของตัวแปรโฟลว์ส่วนหัว HTTP user-agent
ในองค์ประกอบ XML ที่ชื่อ 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>
สำหรับเพย์โหลด 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: ตั้งค่า/รับตัวแปร
ตัวอย่างต่อไปนี้ใช้ Assign Message Policy 3 รายการ
- สร้างตัวแปรโฟลว์ 3 รายการในคำขอที่มีค่าคงที่
- รับตัวแปรโฟลว์แบบไดนามิกในนโยบายที่ 2 ในโฟลว์คำขอ
- ตั้งค่าในเพย์โหลดของการตอบกลับ
<!-- 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>
จะสร้างและตั้งค่าตัวแปร 3 รายการในคำขอ องค์ประกอบ <Name>
แต่ละรายการจะระบุชื่อตัวแปร และ <Value>
จะระบุค่า
นโยบายที่ 2 ใช้องค์ประกอบ <AssignVariable>
เพื่ออ่านค่าและสร้างตัวแปรใหม่ 3 รายการ
<!-- 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>
ในนโยบายที่ 2 องค์ประกอบ <Ref>
จะอ้างอิงตัวแปรแหล่งที่มา
และองค์ประกอบ <Name>
จะระบุชื่อของตัวแปรใหม่ หากเข้าถึงตัวแปรที่อ้างอิงโดยองค์ประกอบ <Ref>
ไม่ได้ คุณสามารถใช้ค่าที่ระบุโดยองค์ประกอบ <Value>
ได้
หากต้องการลองใช้นโยบายชุดนี้ ให้ทำดังนี้
- เพิ่มนโยบาย #1 และ #2 ลงในขั้นตอนการส่งคำขอ อย่าลืมวางนโยบาย #1 ก่อนนโยบาย #2
- เพิ่มนโยบายที่ 3 ในขั้นตอนการตอบกลับ
- นโยบายที่ 3 ใช้องค์ประกอบ
<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>
คือการใส่วงเล็บปีกกา ครอบตัวแปรอย่าลืมตั้งค่าแอตทริบิวต์
contentType
ขององค์ประกอบ<Payload>
เป็น "application/xml" - ส่งคำขอไปยังพร็อกซี API เช่น
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: รับส่วนหัวการตอบกลับของข้อความบริการ
ในตัวอย่างต่อไปนี้ สมมติว่ามีนโยบาย ServiceCallout ในคำขอพร็อกซี API
และการตอบกลับของ Callout มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน
(Set-Cookie
) สมมติว่าตัวแปรการตอบกลับของ Service Callout เป็นค่าเริ่มต้น
calloutResponse
นโยบายต่อไปนี้จะรับค่าส่วนหัว Set-Cookie
รายการที่ 2
<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 ใน GitHub
การอ้างอิงองค์ประกอบย่อย
ส่วนนี้จะอธิบายองค์ประกอบย่อยของ <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>
เพื่อรับค่าของ
พารามิเตอร์สตริงการค้นหา 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>
ตัวอย่างที่ 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>
ใน PreFlow ของคำขอ หากดูผลลัพธ์ในเครื่องมือ
เช่น เครื่องมือติดตาม คำขอไปยัง "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>
ตัวอย่างนี้จะรับพารามิเตอร์สตริงการค้นหาจากคำขอต้นทางและเพิ่มพารามิเตอร์เหล่านั้น เป็นพารามิเตอร์แบบฟอร์มในคำขอที่ส่งไปยังปลายทางเป้าหมาย
คุณใช้เครื่องมือติดตามเพื่อดูโฟลว์ได้ คุณจะเห็นว่าเนื้อหาของคำขอ มีข้อมูลแบบฟอร์มที่เข้ารหัส URL ซึ่งเดิมส่งเป็นสตริงคำค้นหา พารามิเตอร์
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
คุณจะใช้ <FormParams>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้
- คำกริยา HTTP: POST
- ประเภทข้อความ: คำขอ
- อย่างใดอย่างหนึ่ง (หรือทั้ง 2 อย่าง) ต่อไปนี้
- ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่ง หรือ "" (สตริงว่างเปล่า) เช่น หากใช้
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
- ประเภทข้อความ: คำขอ
นอกจากนี้ คุณจะตั้งค่าพารามิเตอร์การค้นหาได้ก็ต่อเมื่อแอตทริบิวต์ type
ขององค์ประกอบ <AssignTo>
เป็นข้อความคำขอ การตั้งค่าในคำตอบจะไม่มีผล
หากคุณกําหนดอาร์เรย์พารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย
(<Add><QueryParams/></Add>
) นโยบายจะไม่เพิ่มพารามิเตอร์การค้นหา
ใดๆ ซึ่งเหมือนกับการละเว้น <QueryParams>
<AssignTo>
กำหนดออบเจ็กต์ที่นโยบาย AssignMessage จะทำงานด้วย ตัวเลือกมีดังนี้
- ข้อความคำขอ:
request
ที่พร็อกซี API ได้รับ - ข้อความตอบกลับ:
response
ที่เซิร์ฟเวอร์เป้าหมายส่งกลับมา - ข้อความที่กำหนดเอง: ออบเจ็กต์คำขอหรือการตอบกลับที่กำหนดเอง
โปรดทราบว่าในบางกรณี คุณจะเปลี่ยนออบเจ็กต์ที่นโยบาย AssignMessage ทำงานไม่ได้
เช่น คุณไม่สามารถใช้ <Add>
หรือ <Set>
เพื่อเพิ่มหรือเปลี่ยนพารามิเตอร์การค้นหา
(<QueryParams>
) หรือพารามิเตอร์แบบฟอร์ม (<FormParams>
) ในการตอบกลับ คุณสามารถ
แก้ไขพารามิเตอร์การค้นหาและพารามิเตอร์แบบฟอร์มในคำขอได้เท่านั้น
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริง |
องค์ประกอบหลัก |
<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>
) จะทำงานกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนต่อๆ ไปได้ หรือจะส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceCallout ก็ได้
ตัวอย่างที่ 3
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่ชื่อ "MyRequestObject"
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>
, <Set>
และ <Set>
) จะทำงานกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนต่อๆ ไปได้ หรือจะส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceCallout ก็ได้
ตารางต่อไปนี้จะอธิบายแอตทริบิวต์ของ <AssignTo>
แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
---|---|---|---|
createNew |
กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกำหนดค่าหรือไม่ หากเป็น "จริง" นโยบายจะสร้างตัวแปรใหม่ของประเภทที่ระบุโดย หากเป็น "false" นโยบายจะตอบกลับด้วยวิธีใดวิธีหนึ่งต่อไปนี้
หากไม่ได้ระบุ
|
ไม่บังคับ | บูลีน |
transport |
ระบุประเภทการรับส่งสำหรับประเภทข้อความคำขอหรือการตอบกลับ ค่าเริ่มต้นคือ "http" (ค่าเดียวที่รองรับ) |
ไม่บังคับ | สตริง |
type |
ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "จริง" ค่าที่ใช้ได้
คือ "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>
เพื่อเชื่อมตัวแปรบริบท 2 ตัว
กับสตริงตัวอักษร (ยัติภังค์) ระหว่างตัวแปรทั้ง 2
<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>
)
ระบุชื่อของตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่มีการตั้งค่าโดยนโยบาย AssignMessage) หากไม่มีตัวแปรที่ชื่อตามที่ระบุใน <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
flow
ให้ทำดังนี้
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
หากต้องการกำหนดค่าเริ่มต้นสำหรับตัวแปรโฟลว์ปลายทาง ให้ใช้ <Value>
ร่วมกับ <Ref>
หากตัวแปรโฟลว์ที่ระบุโดย
<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 รายการ
ตัวอย่างที่ 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
เป็น Null อ่านไม่ได้ หรือมีรูปแบบไม่ถูกต้อง Edge จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรใหม่
ตัวอย่างที่ 3
กรณีการใช้งานทั่วไปสำหรับ <AssignVariable>
คือการตั้งค่าเริ่มต้นของพารามิเตอร์การค้นหา
ส่วนหัว หรือค่าอื่นๆ ที่ส่งไปพร้อมกับคำขอได้ ตัวอย่างเช่น คุณสร้าง
พร็อกซี API สภาพอากาศที่คำขอใช้พารามิเตอร์การค้นหาเดียวชื่อ "w" พารามิเตอร์นี้
มีรหัสของเมืองที่คุณต้องการทราบสภาพอากาศ URL ของคำขอมีรูปแบบดังนี้
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
และกำหนดค่าให้กับตัวมันเอง หากตัวแปรโฟลว์เป็น Null ซึ่งหมายความว่ามีการละเว้นพารามิเตอร์การค้นหา "w" จากคำขอ ตัวอย่างนี้จะใช้ค่าเริ่มต้นจากองค์ประกอบ <Value>
ดังนั้น คุณจึงส่งคำขอไปยังพร็อกซี API นี้ได้
โดยไม่ต้องระบุพารามิเตอร์การค้นหา "w"
http://myCO.com/v1/weather/forecastrss
...และยังคงให้พร็อกซี API แสดงผลลัพธ์ที่ถูกต้อง
ค่าของ <Ref>
ต้องเป็นตัวแปรโฟลว์ เช่น พร็อพเพอร์ตี้ของออบเจ็กต์ request
, response
หรือ target
ซึ่งแตกต่างจากเมื่อใช้ <Value>
ค่านี้อาจเป็นตัวแปรโฟลว์ที่กำหนดเองซึ่งคุณสร้างขึ้นก็ได้
หากคุณระบุตัวแปรโฟลว์ที่ไม่มีอยู่สำหรับค่าของ <Ref>
,
และค่าของ <IgnoreUnresolvedVariables>
เป็น "จริง" 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
ตัวอย่างต่อไปนี้ใช้ไวยากรณ์การสร้างเทมเพลตข้อความเพื่อเชื่อมตัวแปรบริบท 2 ตัว กับสตริงตัวอักษร (ยัติภังค์) ระหว่างตัวแปรทั้ง 2
<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
ตัวอย่างต่อไปนี้ระบุตัวแปรโฟลว์และค่าข้อความ ในกรณีนี้ หากตัวแปรที่อ้างอิงไม่ใช่ค่าว่าง ระบบจะใช้ค่านั้นเป็นเทมเพลต หากค่าที่อ้างอิง
เป็น Null ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {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
ตัวอย่างต่อไปนี้จะคัดลอกส่วนหัว พารามิเตอร์แบบฟอร์ม 3 รายการ เส้นทาง และพารามิเตอร์การค้นหาทั้งหมดจากคำขอไปยังคำขอใหม่ที่กำหนดเอง
<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>
มีแอตทริบิวต์ต่อไปนี้
แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
---|---|---|---|
source |
ระบุออบเจ็กต์ต้นทางของการคัดลอก
|
ไม่บังคับ | สตริง |
<FormParams>
(บุตรของ <Copy>
)
คัดลอกพารามิเตอร์แบบฟอร์มจากคำขอที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังคำขอที่ระบุโดยองค์ประกอบ <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
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์ม 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" และค่าที่ 2 ของ "f3" หาก "f3" มีค่าเพียงค่าเดียว ระบบจะไม่คัดลอก
คุณจะใช้ <FormParams>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้
- คำกริยา HTTP: POST
- ประเภทข้อความ: การตอบกลับ
- อย่างใดอย่างหนึ่ง (หรือทั้ง 2 อย่าง) ต่อไปนี้
- ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่ง หรือ "" (สตริงว่างเปล่า) เช่น หากใช้
curl
ให้เพิ่ม-d ""
ลงในคำขอ - ส่วนหัว
Content-Length
: ตั้งค่าเป็น 0 (หากไม่มีข้อมูลใน คำขอดั้งเดิม มิฉะนั้นให้ใช้ความยาวปัจจุบัน เช่นcurl
เพิ่ม-H "Content-Length: 0"
ในคำขอ
- ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่ง หรือ "" (สตริงว่างเปล่า) เช่น หากใช้
เมื่อคุณคัดลอก <FormParams>
<Copy>
จะตั้งค่า Content-Type
ของข้อความเป็น
"application/x-www-form-urlencoded" ก่อนส่งข้อความไปยังบริการเป้าหมาย
<Headers>
(บุตรของ <Copy>
)
คัดลอกส่วนหัว HTTP จากข้อความคำขอหรือการตอบกลับที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังข้อความคำขอหรือการตอบกลับที่ระบุโดยองค์ประกอบ <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" และค่าที่ 2 ของ "h3" หาก "h3" มีค่าเพียงค่าเดียว ระบบจะไม่คัดลอก
<Path>
(บุตรของ <Copy>
)
กำหนดว่าจะคัดลอกเส้นทางจากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
หากเป็น "จริง" นโยบายนี้จะคัดลอกเส้นทาง จากข้อความคำขอที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังข้อความคำขอที่ระบุโดยองค์ประกอบ <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>
)
กำหนดว่าจะคัดลอกเพย์โหลดจากแหล่งที่มาไปยังปลายทางหรือไม่ โดยต้นทางและปลายทางอาจเป็นคำขอหรือการตอบกลับก็ได้
หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลดจากข้อความที่ระบุโดยองค์ประกอบ
<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>
เป็น "จริง" เพื่อให้ระบบคัดลอกเพย์โหลดของคำขอจากคำขอไปยังการตอบกลับ
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(บุตรของ <Copy>
)
คัดลอกพารามิเตอร์สตริงคำค้นหาจากคำขอที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ
<Copy>
ไปยังคำขอที่ระบุโดยองค์ประกอบ
<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" และค่าที่ 2 ของ "qp3" หาก "qp3" มีค่าเพียงค่าเดียว ระบบจะไม่คัดลอก
คุณจะใช้ <QueryParams>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
<ReasonPhrase>
(บุตรของ <Copy>
)
กำหนดว่าจะคัดลอกวลีเหตุผลจากคำตอบต้นทางไปยังคำตอบปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำขอ
หากเป็น "จริง" นโยบายนี้จะคัดลอก ReasonPhrase
จากการตอบกลับ
ที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังการตอบกลับ
ที่ระบุโดยองค์ประกอบ <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>
เป็น "จริง" ซึ่งทำให้ <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>
)
กำหนดว่าจะคัดลอกรหัสสถานะจากคำตอบของแหล่งที่มาไปยังคำตอบของปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำขอ
หากเป็น "จริง" นโยบายนี้จะคัดลอกรหัสสถานะจากข้อความตอบกลับที่ระบุโดย
แอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังข้อความตอบกลับ
ที่ระบุโดยองค์ประกอบ <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>
จะช่วยให้มั่นใจได้ว่าการตอบกลับของพร็อกซีมีสถานะเดียวกันกับการตอบกลับที่ได้รับจากเป้าหมายเมื่อตั้งค่าแอตทริบิวต์ createNew
ของ <AssignTo>
เป็น "true"
<Verb>
(บุตรของ <Copy>
)
กำหนดว่าจะคัดลอกกริยา HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
หากเป็น "true" จะคัดลอกกริยาที่พบในแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังคำขอที่ระบุในองค์ประกอบ <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 จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
หากเป็น "จริง" จะคัดลอกเวอร์ชัน HTTP ที่พบในแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังออบเจ็กต์ที่ระบุโดยองค์ประกอบ <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>
เป็น "จริง" ในคำขอ ซึ่งจะคัดลอกเวอร์ชันจากออบเจ็กต์คำขอเริ่มต้นไปยังออบเจ็กต์คำขอใหม่ที่กำหนดเอง
<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 การจัดการโดยใช้ชื่ออื่นที่ฟังดูเป็นธรรมชาติมากกว่า
องค์ประกอบ <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
แตกต่างจากการตั้งค่า continueOnError
ของ <AssignMessage>
เป็น true
เนื่องจากเป็นการตั้งค่าและรับค่าของตัวแปรโดยเฉพาะ หากตั้งค่า continueOnError
เป็น
true
Edge จะไม่สนใจข้อผิดพลาดทั้งหมด ไม่ใช่แค่ข้อผิดพลาดที่พบเมื่อใช้
ตัวแปร
องค์ประกอบ <IgnoreUnresolvedVariables>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่า <IgnoreUnresolvedVariables>
เป็น "จริง"
<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
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์แบบฟอร์ม 3 รายการออกจากคำขอ
<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" และค่าที่ 2 ของ "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" และค่าที่ 2 ของ "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" และค่าที่ 2 ของ "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 |
ระบุตัวคั่นนำหน้าในตัวแปรโฟลว์ (ไม่บังคับ) ค่าเริ่มต้นคือ "{" ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์ | ไม่บังคับ | Char |
variableSuffix |
ระบุตัวคั่นต่อท้ายในตัวแปรโฟลว์ (ไม่บังคับ) ค่าเริ่มต้นคือ "}" ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์ | ไม่บังคับ | Char |
<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
ตัวอย่างต่อไปนี้จะตั้งค่าพารามิเตอร์การค้นหา "address" เป็นค่าของตัวแปร 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" (เมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "จริง") |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ 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>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้
- ประเภทข้อความ: คำขอ
สร้างข้อความคำขอที่กำหนดเอง
คุณสามารถใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอที่กำหนดเองได้ หลังจากสร้างคำขอที่กำหนดเองแล้ว คุณจะใช้คำขอดังกล่าวได้ในลักษณะต่อไปนี้
- เข้าถึงตัวแปรของนโยบายในนโยบายอื่นๆ
- ส่งไปยังบริการภายนอก
หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo>
ในนโยบาย AssignMessage
ของคุณ ตั้งค่า createNew
เป็น "true" และระบุชื่อของข้อความใหม่ในเนื้อหา
ขององค์ประกอบ ดังตัวอย่างต่อไปนี้
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
โดยค่าเริ่มต้น Edge จะไม่ดำเนินการใดๆ กับข้อความคำขอที่กำหนดเอง หลังจากสร้างแล้ว Edge จะ ดำเนินการตามขั้นตอนด้วยคำขอเดิม หากต้องการใช้คำขอที่กำหนดเอง ให้เพิ่มนโยบาย เช่น ServiceCallout policy ลงในพร็อกซีที่ส่งคำขอที่กำหนดเองไปยังบริการภายนอกได้
ตัวอย่างต่อไปนี้สร้างข้อความคำขอที่กำหนดเอง
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอที่กำหนดเองด้วย 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 นโยบายนี้จะทำสิ่งต่อไปนี้
- คัดลอกค่าของส่วนหัว HTTP
user-agent
จากคำขอขาเข้า ไปยังข้อความใหม่ เนื่องจาก<Copy>
ใช้การอ้างอิงแบบสัมบูรณ์ไปยังตัวแปรโฟลว์user-agent
จึงไม่จำเป็นต้องระบุแอตทริบิวต์source
ให้กับ<Copy>
- ตั้งค่าพารามิเตอร์การค้นหา
address
ในข้อความที่กำหนดเองเป็นค่าของ พารามิเตอร์การค้นหาaddy
ของคำขอขาเข้า - ตั้งค่ากริยา HTTP เป็น
GET
- คัดลอกค่าของส่วนหัว HTTP
- ตั้งค่า
<IgnoreUnresolvedVariables>
เป็น "false" เมื่อ<IgnoreUnresolvedVariables>
เป็น "เท็จ" หากตัวแปรใดตัวแปรหนึ่งที่นโยบายพยายามเพิ่มไม่มีอยู่ Edge จะหยุด การประมวลผลในโฟลว์ API
ตัวอย่างที่ 2
ต่อไปนี้เป็นอีกตัวอย่างที่แสดงวิธีสร้างออบเจ็กต์คำขอที่กำหนดเองด้วย Assign Message
<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>
ในคำขอใหม่
คุณเข้าถึงข้อความคำขอที่กำหนดเองได้ในนโยบาย AssignMessage อื่นที่เกิดขึ้นในภายหลังใน
โฟลว์ ตัวอย่างต่อไปนี้จะรับค่าของส่วนหัว 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>
วิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย AssignMessage ได้ในวิดีโอต่อไปนี้
วิดีโอ | คำอธิบาย |
---|---|
เหตุใดจึงต้องกำหนดนโยบายข้อความ | ดูประโยชน์ของการใช้นโยบาย AssignMessage เพื่อแก้ไขคำขอ API หรือ การตอบกลับโดยไม่ต้องแก้ไขโค้ดแบ็กเอนด์ |
คัดลอกองค์ประกอบ API โดยใช้นโยบาย AssignMessage | คัดลอกองค์ประกอบจากคำขอหรือการตอบกลับของ API แล้วสร้างคำขอหรือการตอบกลับใหม่ โดยใช้ออบเจ็กต์นโยบาย AssignMessage |
นำองค์ประกอบ API ออกโดยใช้นโยบาย AssignMessage | นำองค์ประกอบ API ออกและแก้ไข API ก่อนที่จะไปถึงแบ็กเอนด์เป้าหมายโดยใช้นโยบาย AssignMessage |
เพิ่มและตั้งค่า API โดยใช้นโยบาย AssignMessage | เปลี่ยนคำขอหรือการตอบกลับ API โดยการเพิ่มพารามิเตอร์การค้นหา ส่วนหัว พารามิเตอร์แบบฟอร์ม หรือ เพย์โหลดโดยใช้นโยบาย AssignMessage |
สร้างตัวแปรที่กำหนดเอง โดยใช้นโยบาย AssignMessage | ตั้งค่าตัวแปรโฟลว์ที่กำหนดเองโดยใช้นโยบาย AssignMessage และใช้ประโยชน์จากตัวแปรใน นโยบายอื่นๆ ในพร็อกซี API |
สร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ โดยใช้นโยบาย AssignMessage | สร้างออบเจ็กต์คำขอหรือการตอบกลับ API ใหม่โดยใช้นโยบาย AssignMessage ที่รันไทม์ของ API |
สร้าง API จำลอง โดยใช้นโยบาย AssignMessage | สร้าง REST API จำลองอย่างง่ายโดยเพิ่มนโยบาย AssignMessage ในโฟลว์การตอบกลับ |
ตั้งค่าหรือแก้ไข เพย์โหลดโดยใช้นโยบาย AssignMessage | แปลงคำขอ REST เป็นคำขอ SOAP โดยการตั้งค่าเพย์โหลด SOAP โดยใช้นโยบาย AssignMessage ที่รันไทม์ของ API |
รหัสข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | นโยบายไม่สามารถตั้งค่าตัวแปร ดูสตริงข้อผิดพลาดสำหรับชื่อของไฟล์ ตัวแปรที่ยังไม่ได้แก้ไข | |
steps.assignmessage.VariableOfNonMsgType |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากแอตทริบิวต์ ตัวแปรประเภทข้อความแสดงคำขอ HTTP และการตอบกลับทั้งหมด Edge ในตัว
ตัวแปรโฟลว์ |
build |
steps.assignmessage.UnresolvedVariable |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรที่ระบุในนโยบาย "มอบหมายข้อความ" มีลักษณะดังนี้
|
build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | สาเหตุ | แก้ไข |
---|---|---|
InvalidIndex |
หากดัชนีที่ระบุในองค์ประกอบ <Copy> และ/หรือ <Remove> ของข้อความมอบหมาย
นโยบายเป็น 0 หรือเป็นจำนวนลบ การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว
|
build |
InvalidVariableName |
หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable>
การทำให้พร็อกซี API ใช้งานได้ล้มเหลวเนื่องจากไม่มีชื่อตัวแปรที่ถูกต้องสำหรับ
ที่จะกำหนดค่า ต้องระบุชื่อตัวแปรที่ถูกต้อง
|
build |
InvalidPayload |
เพย์โหลดที่ระบุในนโยบายไม่ถูกต้อง |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาดขณะรันไทม์ สำหรับข้อมูลเพิ่มเติม ดูสิ่งที่คุณ ที่ต้องทราบเกี่ยวกับข้อผิดพลาดด้านนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด | assignmessage.AM-SetResponse.failed = true |
ตัวอย่างการตอบสนองข้อผิดพลาด
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
ตัวอย่างกฎข้อผิดพลาด
<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>
สคีมา
นโยบายแต่ละประเภทกำหนดโดยสคีมา XML (.xsd
) โดยคุณดูสคีมานโยบาย
ได้ใน GitHub
หัวข้อที่เกี่ยวข้อง
ตัวอย่างการทำงาน ของนโยบาย AssignMessage มีอยู่ในตัวอย่างแพลตฟอร์ม API
ดูตัวอย่างขั้นสูงเพิ่มเติมเกี่ยวกับวิธีลบล้าง target.url
จาก
ProxyEndpoint ได้ที่บทความนี้ในชุมชน Apigee
หากต้องการดู "set path" ในการดำเนินการในนโยบาย ServiceCallout โปรดดูตัวอย่างการเรียนรู้จากการปฏิบัตินี้ในตัวอย่าง Apigee GitHub เพียงโคลนที่เก็บและ ทำตามวิธีการในหัวข้อนั้น ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบาย Service Callout เพื่อส่งคำขอไปยังบริการภายนอก