คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X info
![]()
อะไร
นโยบาย AssignMessage จะเปลี่ยนหรือสร้างข้อความคำขอและการตอบกลับใหม่ในระหว่างขั้นตอนของพร็อกซี API นโยบายนี้ช่วยให้คุณดำเนินการต่อไปนี้กับข้อความเหล่านั้นได้
- เพิ่มพารามิเตอร์แบบฟอร์ม ส่วนหัว หรือพารามิเตอร์การค้นหาใหม่ลงในข้อความ
- คัดลอกพร็อพเพอร์ตี้ที่มีอยู่จากข้อความหนึ่งไปยังอีกข้อความหนึ่ง
- นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดข้อความออกจากข้อความ
- ตั้งค่าของพร็อพเพอร์ตี้ที่มีอยู่ในข้อความ
เมื่อใช้นโยบาย AssignMessage โดยปกติแล้วคุณจะเพิ่ม เปลี่ยนแปลง หรือนำพร็อพเพอร์ตี้ของคำขอหรือการตอบกลับออก อย่างไรก็ตาม คุณยังใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอหรือการตอบกลับที่กำหนดเองและส่งไปยังเป้าหมายอื่นได้ด้วย ตามที่อธิบายไว้ในสร้างข้อความคำขอที่กำหนดเอง
นโยบาย AssignMessage สามารถสร้างหรือเปลี่ยนแปลงข้อความหรือตัวแปรโฟลว์ได้ ใช้นโยบายนี้เพื่อแก้ไขข้อความคำขอก่อนส่งผ่านพร็อกซีไปยังระบบอัปสตรีม หรือเพื่อแก้ไขข้อความตอบกลับก่อนส่งต่อไปยังแอปพลิเคชันผู้ใช้ API
องค์ประกอบ <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>
เมื่อคุณแทรกนโยบาย AssignMessage ใหม่ใน Edge UI เทมเพลตจะมีสตับสำหรับการดำเนินการที่เป็นไปได้ทั้งหมด โดยปกติแล้ว คุณจะเลือกการดำเนินการที่ต้องการทำกับนโยบายนี้และนำองค์ประกอบย่อยที่เหลือออก เช่น หากต้องการดำเนินการคัดลอก ให้ใช้องค์ประกอบ <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 ได้
1: เพิ่มส่วนหัว
ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัวลงในคำขอด้วยองค์ประกอบ <Add>
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>2: นำเพย์โหลดออก
ตัวอย่างต่อไปนี้จะลบเพย์โหลดออกจากการตอบกลับด้วยองค์ประกอบ <Remove>
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: แก้ไขคำตอบ
ตัวอย่างต่อไปนี้จะแก้ไขออบเจ็กต์การตอบกลับที่มีอยู่โดยเพิ่มส่วนหัวลงในออบเจ็กต์
<AssignMessage name="AM-modify-response">
<Set>
<Headers>
<Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
</Headers>
</Set>
<IgnoreUnresolvedVariables>false
</IgnoreUnresolvedVariables>
<AssignTo>response</AssignTo>
</AssignMessage>ตัวอย่างนี้ไม่ได้สร้างข้อความใหม่ แต่จะแก้ไขข้อความตอบกลับที่มีอยู่โดยการเพิ่มส่วนหัว HTTP
เนื่องจากตัวอย่างนี้ระบุ response เป็นชื่อตัวแปรในองค์ประกอบ <AssignTo> นโยบายนี้จึงแก้ไขออบเจ็กต์การตอบกลับที่ตั้งค่าไว้ตั้งแต่แรกด้วยข้อมูลที่เซิร์ฟเวอร์เป้าหมายแสดงผล
ส่วนหัว HTTP ที่เพิ่มลงในข้อความตอบกลับโดยนโยบายนี้ได้มาจากตัวแปรที่สร้างขึ้นโดยนโยบาย LookupCache ดังนั้น ข้อความตอบกลับที่แก้ไขโดยนโยบาย Assign Message นี้จึงมีส่วนหัว HTTP ที่ระบุว่ามีการดึงผลลัพธ์จากแคชหรือไม่ การตั้งค่าส่วนหัวในการตอบกลับจะมีประโยชน์สำหรับการแก้ไขข้อบกพร่องและการแก้ปัญหา
4: ตั้งค่าเนื้อหาแบบไดนามิก
คุณสามารถใช้ Assign Message เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของข้อความคำขอและคำตอบได้
หากต้องการฝังตัวแปร Edge Flow ในเพย์โหลด XML ให้ใส่วงเล็บปีกกาครอบตัวแปรที่กำหนดไว้ ดังนี้ {prefix.name}
ตัวอย่างต่อไปนี้ฝังค่าของตัวแปรโฟลว์ส่วนหัว HTTP user-agent ในองค์ประกอบ XML ที่ชื่อ User-agent
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>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="AM-remove-query-param">
<Remove>
<QueryParams>
<QueryParam name="apikey"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>แนวทางปฏิบัติแนะนำคือการตัดพารามิเตอร์การค้นหา apikey ออกจากข้อความคำขอเมื่อคุณใช้นโยบาย VerifyAPIKey สำหรับการตรวจสอบสิทธิ์ผู้ใช้ ซึ่งจะช่วยป้องกันไม่ให้มีการส่งข้อมูลคีย์ที่ละเอียดอ่อนไปยังเป้าหมายแบ็กเอนด์
6: ตั้งค่า/รับตัวแปร
ตัวอย่างต่อไปนี้ใช้นโยบาย Assign Message 3 รายการ
- สร้างตัวแปรโฟลว์ 3 รายการในคำขอ โดยมีค่าแบบคงที่
- รับตัวแปรโฟลว์แบบไดนามิกในนโยบายที่ 2 ในโฟลว์คำขอ
- ตั้งค่าในเพย์โหลดของการตอบกลับ
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-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> </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: รับส่วนหัวการตอบกลับของ Service Callout
ในตัวอย่างต่อไปนี้ สมมติว่านโยบาย ServiceCallout อยู่ในคำขอพร็อกซี API และการตอบกลับคำขอไฮไลต์มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน (Set-Cookie) สมมติว่าตัวแปรการตอบกลับของ Service Callout เป็นค่าเริ่มต้น calloutResponse นโยบายต่อไปนี้จะได้รับค่าส่วนหัว Set-Cookie รายการที่ 2
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </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 name="AM-add-formparams-3">
<Add>
<FormParams>
<FormParam name="username">{request.queryparam.name}</FormParam>
<FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
<FormParam name="default_language">{request.queryparam.lang}</FormParam>
</FormParams>
</Add>
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Example 2
ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <Headers> เพื่อเพิ่มส่วนหัว partner-id ลงในคำขอที่จะส่งไปยังปลายทางเป้าหมาย
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 3
ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <QueryParams> เพื่อเพิ่มพารามิเตอร์การค้นหารายการเดียวที่มีค่าแบบคงที่ลงในคำขอ
<AssignMessage name="AM-add-queryparams-1">
<Add>
<QueryParams>
<QueryParam name="myParam">42</QueryParam>
</QueryParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างนี้ใช้ <Add> ใน Preflow ของคำขอ หากดูผลลัพธ์ในเครื่องมือ เช่น Trace tool คำขอไปยัง https://example-target.com/get จะกลายเป็น https://example-target.com/get?myParam=42
องค์ประกอบย่อยของ <Add> รองรับการแทนที่สตริงแบบไดนามิก หรือที่เรียกว่าการสร้างเทมเพลตข้อความ
<FormParams> (บุตรหลานของ <Add>)
เพิ่มพารามิเตอร์แบบฟอร์มใหม่ลงในข้อความคำขอ องค์ประกอบนี้ไม่มีผลต่อข้อความตอบกลับ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> รายการ |
| องค์ประกอบหลัก |
<Add>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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 name="AM-add-formparams-1">
<Add>
<FormParams>
<FormParam name="answer">42</FormParam>
</FormParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้จะรับค่าของพารามิเตอร์การค้นหา name และเพิ่มลงในคำขอเป็นพารามิเตอร์แบบฟอร์ม จากนั้นนำพารามิเตอร์การค้นหาออก
<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
<Add>
<FormParam name="name">{request.queryparam.name}</FormParam>
</Add>
<Remove>
<QueryParam name="name"/>
</Remove>
</AssignMessage>โปรดทราบว่าตัวอย่างนี้ไม่ได้ระบุเป้าหมายด้วย <AssignTo> นโยบายนี้จะเพิ่มพารามิเตอร์ลงในคำขอเท่านั้น
ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์แบบฟอร์มหลายรายการลงในคำขอ
<AssignMessage name="AM-add-formparams-3">
<Add>
<FormParams>
<FormParam name="username">{request.queryparam.name}</FormParam>
<FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
<FormParam name="default_language">{request.queryparam.lang}</FormParam>
</FormParams>
</Add>
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างนี้จะรับพารามิเตอร์สตริงคำค้นหาจากคำขอต้นทางและเพิ่มเป็นพารามิเตอร์แบบฟอร์มที่มีชื่อต่างกัน จากนั้นจะนําพารามิเตอร์การค้นหาเดิมออก Apigee จะส่งคำขอที่แก้ไขแล้วไปยังปลายทางเป้าหมาย
คุณสามารถใช้เครื่องมือติดตามเพื่อดูขั้นตอนได้ คุณจะเห็นว่าเนื้อหาของคำขอมีข้อมูลแบบฟอร์มที่เข้ารหัส URL ซึ่งเดิมส่งมาเป็นพารามิเตอร์สตริงการค้นหา ดังนี้
username=nick&zip_code=90210&default_language=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
ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัว partner-id ลงในข้อความคำขอ และ
กำหนดค่าของตัวแปรโฟลว์ verifyapikey.VAK-1.developer.app.partner-id ให้กับส่วนหัวนั้น
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</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 name="AM-add-queryparams-1">
<Add>
<QueryParams>
<QueryParam name="myParam">42</QueryParam>
</QueryParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อเป็นไปตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
นอกจากนี้ คุณจะตั้งค่าพารามิเตอร์การค้นหาได้ก็ต่อเมื่อแอตทริบิวต์ type ขององค์ประกอบ <AssignTo> เป็นข้อความคำขอเท่านั้น การตั้งค่าในคำตอบจะไม่มีผลใดๆ
หากคุณกำหนดอาร์เรย์พารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย (<Add><QueryParams/></Add>) นโยบายจะไม่เพิ่มพารามิเตอร์การค้นหาใดๆ ซึ่งจะเหมือนกับการละเว้น <QueryParams>
<AssignTo>
กำหนดออบเจ็กต์ที่นโยบาย AssignMessage จะดำเนินการ ตัวเลือกมีดังนี้
- ข้อความคำขอ:
requestที่ได้รับจากพร็อกซี API - ข้อความตอบกลับ:
responseที่แสดงผลจากเซิร์ฟเวอร์เป้าหมาย - ข้อความที่กำหนดเอง: ออบเจ็กต์คำขอหรือการตอบกลับที่กำหนดเอง
โปรดทราบว่าในบางกรณี คุณจะเปลี่ยนออบเจ็กต์ที่นโยบาย AssignMessage ดำเนินการไม่ได้
เช่น คุณไม่สามารถใช้ <Add> หรือ <Set> เพื่อเพิ่มหรือเปลี่ยนแปลงพารามิเตอร์การค้นหา (<QueryParams>) หรือพารามิเตอร์แบบฟอร์ม (<FormParams>) ในการตอบกลับ คุณจะจัดการได้เฉพาะพารามิเตอร์การค้นหาและพารามิเตอร์แบบฟอร์มในคำขอเท่านั้น
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย | ไม่มี |
หากคุณไม่ได้ระบุ <AssignTo> หรือหากคุณระบุองค์ประกอบ <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"> <!-- DO NOT do this --> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะสร้างออบเจ็กต์คำขอใหม่
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Copy>) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น
คุณสามารถเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนภายหลัง หรือส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกที่มีนโยบาย ServiceCallout
ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะสร้างออบเจ็กต์คำขอใหม่ชื่อ "MyRequestObject"
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Copy>) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น
คุณสามารถเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนภายหลัง หรือส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกที่มีนโยบาย ServiceCallout
ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <AssignTo>
| แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
|---|---|---|---|
createNew |
กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกำหนดค่าหรือไม่ หากเป็น "จริง" นโยบายจะสร้างตัวแปรใหม่ของประเภทที่ระบุโดย หากเป็น "เท็จ" นโยบายจะตอบสนองด้วยวิธีใดวิธีหนึ่งจาก 2 วิธีต่อไปนี้
หากไม่ได้ระบุ
|
ไม่บังคับ | บูลีน |
transport |
ระบุประเภทการขนส่งสำหรับประเภทข้อความคำขอหรือการตอบกลับ ค่าเริ่มต้นคือ "http" (ค่าเดียวที่รองรับ) |
ไม่บังคับ | สตริง |
type |
ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "true" ค่าที่ใช้ได้คือ "request" หรือ "response"
หากคุณละเว้นแอตทริบิวต์นี้ Edge จะสร้างคำขอหรือการตอบกลับ โดยขึ้นอยู่กับตำแหน่งที่นโยบายนี้ดำเนินการในขั้นตอน |
ไม่บังคับ | สตริง |
<AssignVariable>
กำหนดค่าให้กับตัวแปรโฟลว์ หากไม่มีตัวแปรโฟลว์ <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 ตัวเข้ากับสตริงลิเทอรัล (เครื่องหมายขีดกลาง) ระหว่างตัวแปรทั้งสอง
<AssignMessage name='AV-via-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> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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> หากตัวแปรโฟลว์ที่ระบุโดย <Ref> ไม่มีอยู่ อ่านไม่ได้ หรือเป็นค่า Null แล้ว 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 สำหรับ Weather 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> เป็น "true" Edge จะแสดงข้อผิดพลาด
<Template> (บุตรหลานของ <AssignVariable>)
ระบุเทมเพลตข้อความ เทมเพลตข้อความช่วยให้คุณแทนที่สตริงตัวแปรเมื่อนโยบายทำงาน และสามารถรวมสตริงลิเทอรัลกับชื่อตัวแปรที่รวมอยู่ในวงเล็บปีกกาได้ นอกจากนี้ เทมเพลตข้อความยังรองรับ ฟังก์ชันต่างๆ เช่น การหลีกเลี่ยงและการแปลงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ใช้แอตทริบิวต์ ref เพื่อระบุตัวแปรโฟลว์ที่ค่าของตัวแปรเป็นเทมเพลตข้อความ ตัวอย่างเช่น คุณสามารถจัดเก็บเทมเพลตข้อความเป็นแอตทริบิวต์ที่กำหนดเองในแอปของนักพัฒนาแอป เมื่อ Edge ระบุแอปของนักพัฒนาแอปหลังจากยืนยันคีย์ API หรือโทเค็นความปลอดภัย (ผ่านนโยบายเพิ่มเติม) องค์ประกอบ <AssignVariable> จะใช้เทมเพลตข้อความจากแอตทริบิวต์ที่กำหนดเองของแอปได้ ซึ่งพร้อมใช้งานเป็นตัวแปรโฟลว์จากนโยบายความปลอดภัย
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<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 ตัวเข้ากับสตริงลิเทอรัล (ขีดกลาง) ระหว่างตัวแปรทั้งสอง
<AssignMessage name='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ระบุตัวแปรโฟลว์ โดยที่ค่าของตัวแปรคือเทมเพลตข้อความที่กำหนดไว้ล่วงหน้า ใช้ตัวเลือกนี้หากต้องการแทรกเทมเพลตที่กำหนดไว้ล่วงหน้าในรันไทม์โดยไม่ต้องแก้ไขนโยบาย
<AssignMessage name='AV-via-template-indirectly'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
ตัวอย่าง 3
ตัวอย่างต่อไปนี้ระบุตัวแปรโฟลว์และค่าข้อความ ในกรณีนี้ หากตัวแปรที่อ้างอิงไม่ใช่ค่า Null ระบบจะใช้ค่านั้นเป็นเทมเพลต หากค่าที่อ้างอิงเป็น Null ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {system.uuid}-{messageid}) เป็นเทมเพลต รูปแบบนี้มีประโยชน์ในการระบุค่า "ลบล้าง" ซึ่งในบางกรณีคุณอาจต้องการลบล้างเทมเพลตเริ่มต้น (ส่วนข้อความ) ด้วยค่าที่ตั้งค่าแบบไดนามิก ตัวอย่างเช่น คำสั่งแบบมีเงื่อนไขอาจดึงค่าจากแมปคีย์-ค่าและตั้งค่าตัวแปรที่อ้างอิงเป็นค่านั้น
<AssignMessage name='AV-template-with-fallback'> <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>, ไม่สามารถแก้ไขได้ หรือเป็นค่า Null ระบบจะใช้ค่าของ <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> ระบบจะคัดลอกทุกส่วนของข้อความต้นฉบับที่กำหนดไว้
องค์ประกอบ <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 รายการ เส้นทาง และพารามิเตอร์การค้นหาทั้งหมดจากข้อความ request ไปยังคำขอที่กำหนดเองใหม่ชื่อ newRequest
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
เนื่องจากไม่มีองค์ประกอบอย่าง <Payload> และ <Verb> นโยบายจึงไม่คัดลอกส่วนเหล่านั้นของข้อความ
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำทุกอย่างในข้อความ response ที่มีอยู่ออกก่อน จากนั้นจึงคัดลอกค่าทั้งหมดจากข้อความอื่นที่ชื่อ secondResponse ไปยังข้อความ response
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </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>)
กำหนดว่าควรคัดลอกเพย์โหลดจากต้นทางไปยังปลายทางหรือไม่ ต้นทางและปลายทางอาจเป็นคำขอหรือการตอบกลับก็ได้
หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลดจากข้อความที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความที่ระบุโดยองค์ประกอบ <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="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </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> เป็น true เมื่อระบุองค์ประกอบแหล่งที่มาและ <AssignTo> ตามที่ระบุไว้ จะทำให้ <Copy> คัดลอกวลีเหตุผลจากข้อความตอบกลับที่มีชื่อไปยังออบเจ็กต์ response ดังนี้
<AssignMessage name="AM-copy-reasonphrase-1">
<Copy source="serviceCalloutResponse">
<ReasonPhrase>true</ReasonPhrase>
</Copy>
<AssignTo>response</AssignTo>
</AssignMessage>คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภท Response
<StatusCode> (บุตรหลานของ <Copy>)
กำหนดว่าจะคัดลอกรหัสสถานะจากการตอบกลับต้นทางไปยังการตอบกลับปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำขอ
หากเป็น "จริง" นโยบายนี้จะคัดลอกรหัสสถานะจากข้อความตอบกลับที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความตอบกลับที่ระบุโดยองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภท Response
การใช้งาน <StatusCode> ที่พบบ่อยคือการตั้งค่ารหัสสถานะการตอบกลับของพร็อกซีเป็นค่าอื่นนอกเหนือจากค่าที่ได้รับจากเป้าหมาย
<Verb> (บุตรหลานของ <Copy>)
กำหนดว่าจะคัดลอกคำกริยา HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำตอบ
หากเป็น "จริง" ระบบจะคัดลอกคำกริยาที่พบในแอตทริบิวต์ 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> เป็น "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 การจัดการด้วยชื่ออื่นที่ฟังดูเป็นธรรมชาติมากขึ้น
องค์ประกอบ <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> เป็น "true"
<AssignMessage name="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> </AssignMessage>
เนื่องจาก <IgnoreUnresolvedVariables> ตั้งค่าเป็น true หากไม่ได้กำหนดตัวแปร possibly-defined-variable นโยบายนี้จะไม่แสดงข้อผิดพลาด
<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 name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
ในขั้นตอนการตอบกลับ นโยบายนี้จะนำเนื้อหาของการตอบกลับออก โดยจะแสดงเฉพาะส่วนหัว HTTP ต่อไคลเอ็นต์
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์แบบฟอร์มทั้งหมดและพารามิเตอร์การค้นหาออกจากออบเจ็กต์ request
<AssignMessage name="AM-remove-2">
<Remove>
<!-- Empty (<FormParams/>) removes all form parameters -->
<FormParams/>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะนำทุกอย่างออกจากออบเจ็กต์ข้อความ
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
โดยปกติแล้ว คุณจะดำเนินการนี้ก็ต่อเมื่อต้องการใช้องค์ประกอบ <Set> หรือองค์ประกอบ <Copy> เพื่อตั้งค่าการแทนที่บางค่าในข้อความ
<FormParams> (บุตรหลานของ <Remove>)
นำพารามิเตอร์แบบฟอร์มที่ระบุออกจากคำขอ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> หรืออาร์เรย์ว่างเปล่า |
| องค์ประกอบหลัก |
<Remove>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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="AM-remove-formparams-1">
<Remove>
<FormParams>
<FormParam name="form_param_1"/>
<FormParam name="form_param_2"/>
<FormParam name="form_param_3"/>
</FormParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้จะนําพารามิเตอร์แบบฟอร์มทั้งหมดออกจากคําขอ
<AssignMessage name="AM-remove-formparams-2">
<Remove>
<FormParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 3
หากมีพารามิเตอร์แบบฟอร์มหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-formparams-3">
<Remove>
<FormParams>
<FormParam name="f1"/>
<FormParam name="f2"/>
<FormParam name="f3.2"/>
</FormParams>
</Remove>
<AssignTo>request</AssignTo>
</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="AM-remove-one-header">
<Remove>
<Headers>
<Header name="user-agent"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำส่วนหัวทั้งหมดออกจากคำขอ
<AssignMessage name="AM-remove-all-headers">
<Remove>
<Headers/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างที่ 3
หากมีส่วนหัวหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-headers-3">
<Remove>
<Headers>
<Header name="h1"/>
<Header name="h2"/>
<Header name="h3.2"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</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="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </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="AM-remove-queryparams-1">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนําพารามิเตอร์การค้นหาทั้งหมดออกจากคําขอ
<AssignMessage name="AM-remove-queryparams-2">
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 3
หากมีพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-queryparams-3">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
<QueryParam name="qp2"/>
<QueryParam name="qp3.2"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่างนี้จะนำ "qp1", "qp2" และค่าที่ 2 ของ "qp3" ออกจากคำขอ หาก "qp3" มีค่าเดียว ระบบจะไม่นำออก
ตัวอย่าง 4
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์การค้นหา apikey ออกจากคำขอ
<AssignMessage name="AM-remove-query-param">
<Remove>
<QueryParams>
<QueryParam name="apikey"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อเป็นไปตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
<Set>
ตั้งค่าข้อมูลในข้อความคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo> <Set> จะเขียนทับส่วนหัวหรือพารามิเตอร์การค้นหาหรือแบบฟอร์มที่มีอยู่แล้วในข้อความต้นฉบับ ส่วนหัวและพารามิเตอร์การค้นหาและแบบฟอร์มในข้อความ HTTP อาจมีหลายค่า หากต้องการเพิ่มค่าอื่นๆ สำหรับส่วนหัวหรือพารามิเตอร์ ให้ใช้องค์ประกอบ <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
ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัวที่เฉพาะเจาะจง เมื่อแนบนโยบายนี้ในขั้นตอนคำขอ ระบบจะอนุญาตให้ระบบอัปสตรีมรับส่วนหัวเพิ่มเติมที่ไม่ได้รวมอยู่ในคำขอขาเข้าเดิม
<AssignMessage name="AM-Set-Header">
<Set>
<Headers>
<Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
</Headers>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะเขียนทับเพย์โหลดสำหรับการตอบกลับ รวมถึงส่วนหัว Content-Type
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </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="AM-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
ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัว x-ratelimit-remaining เป็นค่าของตัวแปร ratelimit.Quota-1.available.count
<AssignMessage name="AM-Set-RateLimit-Header">
<Set>
<Headers>
<Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
</Headers>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>หากคุณกำหนดส่วนหัวที่ว่างเปล่าในนโยบาย (<Set><Headers/></Set>) นโยบายจะไม่ตั้งค่าส่วนหัวใดๆ ซึ่งจะให้ผลเหมือนกับการละเว้น <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 เวอร์ชันก่อนหน้า คุณไม่สามารถใช้วงเล็บปีกกาเพื่อระบุการอ้างอิงตัวแปรภายในเพย์โหลด 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> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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 name="AM-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="AM-set-reasonphrase-2">
<Set>
<ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อเป็นไปตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<StatusCode> (บุตรหลานของ <Set>)
ตั้งค่ารหัสสถานะในการตอบกลับ องค์ประกอบนี้ไม่มีผลต่อคำขอ
| ค่าเริ่มต้น | "200" (เมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "true") |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริงหรือ variable |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่ารหัสสถานะแบบง่าย
<AssignMessage name="AM-set-statuscode-404">
<Set>
<StatusCode>404</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <StatusCode> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปรที่อยู่ในวงเล็บปีกกาจะถูกแทนที่ที่รันไทม์ด้วยค่าของตัวแปรที่อ้างอิง ดังตัวอย่างต่อไปนี้
<AssignMessage name="set-statuscode-2">
<Set>
<StatusCode>{calloutresponse.status.code}</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</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="AM-set-verb-1">
<Set>
<Verb>POST</Verb>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>ตัวอย่าง 2
ระบบจะถือว่าเนื้อหาของ <Verb> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปรที่อยู่ในวงเล็บปีกกาจะถูกแทนที่ด้วยค่าของตัวแปรที่อ้างอิงในรันไทม์
ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อป้อนคำกริยา
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
คุณจะใช้ <Verb> ได้ก็ต่อเมื่อเป็นไปตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version> (บุตรหลานของ <Set>)
ตั้งค่าเวอร์ชัน HTTP ในคำขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริงหรือ variable |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version> ใช้ไวยากรณ์ต่อไปนี้
Syntax
<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="AM-set-version-1">
<Set>
<Version>1.1</Version>
</Set>
</AssignMessage>ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ใช้ตัวแปรในวงเล็บปีกกาเพื่อตั้งค่าหมายเลขเวอร์ชัน
<AssignMessage name="AM-set-version-2">
<Set>
<Version>{my_version}</Version>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>ระบบจะถือว่าเนื้อหาของ <Version> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปรที่อยู่ในวงเล็บปีกกาจะถูกแทนที่ด้วยค่าของตัวแปรที่อ้างอิงในรันไทม์
คุณจะใช้ <Version> ได้ก็ต่อเมื่อเป็นไปตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
สร้างข้อความคำขอที่กำหนดเอง
คุณสามารถใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอที่กำหนดเองได้ หลังจากสร้างคำขอที่กำหนดเองแล้ว คุณจะใช้คำขอดังกล่าวได้ด้วยวิธีต่อไปนี้
- เข้าถึงตัวแปรในนโยบายอื่นๆ
- ส่งไปยังบริการภายนอก
หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo> ในนโยบาย AssignMessage ตั้งค่า createNew เป็น "true" และระบุชื่อของข้อความใหม่ในเนื้อหาขององค์ประกอบ ดังตัวอย่างต่อไปนี้
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
โดยค่าเริ่มต้น Edge จะไม่ดำเนินการใดๆ กับข้อความคำขอที่กำหนดเอง หลังจากสร้างแล้ว Edge จะดำเนินการตามขั้นตอนต่อไปด้วยคำขอเดิม หากต้องการใช้คำขอที่กำหนดเอง ให้เพิ่มนโยบาย เช่น นโยบาย ServiceCallout ลงในพร็อกซีที่สามารถส่งคำขอที่กำหนดเองไปยังบริการภายนอกได้
ตัวอย่างต่อไปนี้จะสร้างข้อความคำขอที่กำหนดเอง
ตัวอย่าง 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>partner.request</AssignTo>
<Set>
<Headers>
<Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
</Headers>
</Set>
</AssignMessage>วิดีโอ
ดูวิดีโอต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย AssignMessage
| วิดีโอ | คำอธิบาย |
|---|---|
| เหตุใดจึงต้องใช้นโยบาย Assign Message | ดูข้อมูลเกี่ยวกับประโยชน์ของการใช้นโยบาย 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="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 โปรดดูตัวอย่างการเรียนรู้จากการลงมือทำในตัวอย่าง GitHub ของ Apigee เพียงโคลนที่เก็บและทำตามวิธีการในหัวข้อนั้น ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบาย Service Callout เพื่อส่งคำขอไปยังบริการภายนอก