คุณกําลังดูเอกสารประกอบของ 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 เทมเพลตจะมีสแต็บสําหรับการดำเนินการที่เป็นไปได้ทั้งหมด โดยปกติแล้ว คุณจะต้องเลือกการดำเนินการที่ต้องการทำกับนโยบายนี้ และนำองค์ประกอบย่อยที่เหลือออก เช่น หากต้องการดำเนินการคัดลอก ให้ใช้องค์ประกอบ <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 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 สร้างขึ้น ดังนั้น ข้อความตอบกลับที่แก้ไขโดยนโยบายการกําหนดข้อความนี้จึงมีส่วนหัว HTTP ที่ระบุว่าดึงผลลัพธ์จากแคชหรือไม่ การตั้งค่าส่วนหัวในการตอบกลับจะมีประโยชน์สำหรับการแก้ไขข้อบกพร่องและการแก้ปัญหา
4: ตั้งค่าเนื้อหาแบบไดนามิก
คุณสามารถใช้ Assign Message เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของข้อความตอบกลับและข้อความขอ
หากต้องการฝังตัวแปรของ Edge Flow ในเพย์โหลด XML ให้ใช้วงเล็บปีกกาครอบตัวแปรที่กําหนด ดังนี้ {prefix.name}
ตัวอย่างต่อไปนี้ฝังค่าของuser-agent
ตัวแปรโฟลว์ส่วนหัว HTTP
ในองค์ประกอบ 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 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 และคำตอบของข้อความไฮไลต์มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน (Set-Cookie
) สมมติว่าตัวแปรคำตอบของข้อความไฮไลต์คือ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>
ในขั้นตอนการส่งคำขอล่วงหน้า หากคุณดูผลลัพธ์ในเครื่องมือ เช่น เครื่องมือติดตาม คำขอ "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
เป็น "เท็จ" (ค่าเริ่มต้น) จะทำให้ตัวอย่างนี้ไม่สร้างคำขอใหม่ การดำเนินการทั้งหมดในนโยบายนี้จะส่งผลต่อคำขอเดิม
ตัวอย่างที่ 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 |
กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกําหนดค่าหรือไม่ หากเป็น "จริง" นโยบายจะสร้างตัวแปรใหม่ของประเภทที่ระบุโดย หากเป็น "เท็จ" นโยบายจะตอบสนองด้วยวิธีใดวิธีหนึ่งต่อไปนี้
หากไม่ได้ระบุ
|
ไม่บังคับ | บูลีน |
transport |
ระบุประเภทการรับส่งสำหรับประเภทข้อความคำขอหรือคำตอบ ค่าเริ่มต้นคือ "http" (ค่าที่รองรับเพียงค่าเดียว) |
ไม่บังคับ | สตริง |
type |
ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "true" ค่าที่ใช้ได้มีดังนี้ "request" หรือ "response"
ค่าเริ่มต้นคือ "request" หากคุณละเว้นแอตทริบิวต์นี้ Edge จะสร้างคำขอหรือคำตอบ โดยขึ้นอยู่กับว่านโยบายนี้จะทำงานที่ใดในขั้นตอน |
ไม่บังคับ | สตริง |
<AssignVariable>
กําหนดค่าให้กับตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่มีค่ากําหนดโดยนโยบาย AssignMessage) หากไม่มีตัวแปรโฟลว์ <AssignVariable>
จะสร้างตัวแปรนั้น
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | ประเภทคอมเพล็กซ์ |
องค์ประกอบหลัก |
<AssignMessage>
|
องค์ประกอบย่อย |
<Name> (ต้องระบุ)<Ref> <Template> <Value> |
ค่าที่คุณกําหนดให้กับตัวแปรการไหลปลายทางอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
- สตริงตามตัวอักษร: ใช้องค์ประกอบย่อย
<Value>
เพื่อระบุค่าสตริงตามตัวอักษรสําหรับตัวแปรการไหลปลายทาง - ตัวแปรการไหล: ใช้องค์ประกอบย่อย
<Ref>
เพื่อระบุค่าของตัวแปรการไหลที่มีอยู่สําหรับตัวแปรการไหลปลายทาง ดูรายการตัวแปรของโฟลว์ทั้งหมดที่สามารถใช้เป็นแหล่งที่มาได้ที่ข้อมูลอ้างอิงตัวแปรของโฟลว์ - เทมเพลตข้อความ: ใช้องค์ประกอบย่อย
<Template>
เพื่อระบุเทมเพลตข้อความสําหรับตัวแปรขั้นตอนปลายทาง
องค์ประกอบ <AssignVariable>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
ใช้องค์ประกอบ <Ref>
เพื่อระบุตัวแปรแหล่งที่มา หากเข้าถึงตัวแปรที่ <Ref>
อ้างอิงไม่ได้ Edge จะใช้ค่าที่ระบุโดยองค์ประกอบ <Value>
หากคุณกําหนด <Template>
องค์ประกอบดังกล่าวจะมีลําดับความสําคัญเหนือกว่าองค์ประกอบย่อยอื่นๆ
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่าของตัวแปรใหม่ myvar
เป็นค่า "42"
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้กําหนดค่าของตัวแปรการไหล request.header.user-agent
ให้กับตัวแปรการไหลปลายทาง myvar
และค่าของพารามิเตอร์การค้นหา country
ให้กับตัวแปรการไหลปลายทาง Country
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
หากการกําหนดค่าใดค่าหนึ่งไม่สําเร็จ Edge จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรโฟลว์ปลายทางแทน
หากไม่มีตัวแปรการไหล myvar
หรือ Country
<AssignVariable>
จะสร้างตัวแปรเหล่านั้น
ตัวอย่างที่ 3
ตัวอย่างต่อไปนี้ใช้องค์ประกอบย่อย <Template>
เพื่อต่อตัวแปรบริบท 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>
จะสร้าง myvar
<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 สภาพอากาศที่คำขอใช้พารามิเตอร์การค้นหารายการเดียวชื่อ "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 รายการเข้าด้วยกันโดยมีสตริงตามตัวอักษร (ขีดกลาง) คั่นไว้
<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 ระบบจะใช้ค่านั้นเป็นแทมเพลต หากค่าที่อ้างอิงเป็นค่า 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>
)
กำหนดว่าควรคัดลอกเพย์โหลดจากต้นทางไปยังปลายทางหรือไม่ แหล่งที่มาและปลายทางอาจเป็นคําขอหรือคําตอบ
หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลดจากข้อความที่ระบุโดยแอตทริบิวต์ 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="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>
เป็น "true" ซึ่งทําให้ <Copy>
koppy วลีเหตุผลจากการตอบกลับเริ่มต้นไปยังออบเจ็กต์การตอบกลับที่กําหนดเอง
<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>
เป็น "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>
เป็น "จริง"
<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>
เป็น "จริง" เพื่อให้ระบบล้างข้อมูลเพย์โหลดคำขอ
<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> เป็น "true") |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบหลัก |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่ารหัสสถานะแบบง่าย
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <StatusCode>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่ฝังอยู่ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์ ดังตัวอย่างต่อไปนี้
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
คุณจะใช้ <StatusCode>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<Verb>
(รายการย่อยของ <Set>
)
ตั้งค่าคํากริยา HTTP ในคําขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบหลัก |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Verb>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่าคํากริยาแบบง่ายในคําขอ
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <Verb>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่ใส่ไว้ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์
ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อป้อนข้อมูลคํากริยา
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
คุณจะใช้ <Verb>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version>
(รายการย่อยของ <Set>
)
ตั้งค่าเวอร์ชัน HTTP ในคําขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบหลัก |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่าหมายเลขเวอร์ชันเป็น "1.1"
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ใช้ตัวแปรในวงเล็บปีกกาเพื่อตั้งค่าหมายเลขเวอร์ชัน
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ระบบจะถือว่าเนื้อหาของ <Version>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่ใส่ไว้ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์
คุณจะใช้ <Version>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
สร้างข้อความคำขอที่กำหนดเอง
คุณสามารถใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอที่กำหนดเอง หลังจากสร้างคำขอที่กำหนดเองแล้ว คุณจะใช้คำขอดังกล่าวได้ดังนี้
- เข้าถึงตัวแปรในนโยบายอื่นๆ
- ส่งไปยังบริการภายนอก
หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo>
ในนโยบาย AssignMessage
policy ตั้งค่า createNew
เป็น "true" และระบุชื่อข้อความใหม่ในส่วนเนื้อหาขององค์ประกอบ ดังตัวอย่างต่อไปนี้
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </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 นโยบายนี้มีลักษณะดังนี้
- คัดลอกค่าของส่วนหัว
user-agent
HTTP จากคําขอขาเข้าไปยังข้อความใหม่ เนื่องจาก<Copy>
ใช้การอ้างอิงแบบสัมบูรณ์กับตัวแปรโฟลว์user-agent
จึงไม่จำเป็นต้องระบุแอตทริบิวต์source
ให้กับ<Copy>
- ตั้งค่าพารามิเตอร์การค้นหา
address
ในข้อความที่กําหนดเองเป็นค่าของพารามิเตอร์การค้นหาaddy
ของคําขอขาเข้า - ตั้งค่าคํากริยา HTTP เป็น
GET
- คัดลอกค่าของส่วนหัว
- ตั้งค่า
<IgnoreUnresolvedVariables>
เป็น "เท็จ" เมื่อ<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 Proxy จะดำเนินการไม่สำเร็จ
|
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
หากต้องการดู "เส้นทางที่กำหนด" ที่กำลังทำงานในนโยบาย ServiceCallout โปรดดูเรียนรู้จากตัวอย่างนี้ในตัวอย่าง GitHub ของ Apigee เพียงโคลนที่เก็บและทําตามวิธีการในหัวข้อนั้น ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบายข้อความไฮไลต์ของบริการเพื่อส่งคำขอไปยังบริการภายนอก