คุณกำลังดูเอกสาร Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
นโยบาย 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 ไปยังโฟลว์ใน 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 continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2: นำเพย์โหลดออก
ตัวอย่างต่อไปนี้จะลบเพย์โหลดออกจากการตอบกลับที่มีองค์ประกอบ <Remove>
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3: แก้ไขคำตอบ
ตัวอย่างต่อไปนี้แก้ไขออบเจ็กต์การตอบกลับที่มีอยู่โดยการเพิ่มส่วนหัว
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
ตัวอย่างนี้จะไม่สร้างข้อความใหม่ แต่แก้ไขข้อความตอบกลับที่มีอยู่ด้วยการเพิ่มส่วนหัว HTTP
เนื่องจากตัวอย่างนี้ไม่มีชื่อตัวแปรในองค์ประกอบ <AssignTo>
และระบุว่า type
เป็น "response" นโยบายนี้จึงจะแก้ไขออบเจ็กต์การตอบกลับที่เซิร์ฟเวอร์เป้าหมายส่งคืน
ส่วนหัว HTTP ที่เพิ่มลงในข้อความตอบกลับโดยนโยบายนี้ได้มาจากตัวแปรที่สร้างขึ้นโดยนโยบาย LookupCache ดังนั้นข้อความตอบกลับที่แก้ไขโดยนโยบาย Assign Message นี้มีส่วนหัว HTTP ที่ระบุว่าผลลัพธ์ถูกดึงออกจากแคชหรือไม่ การตั้งค่าส่วนหัวในการตอบกลับอาจเป็นประโยชน์ในการแก้ไขข้อบกพร่องและแก้ปัญหา
4: ตั้งค่าเนื้อหาแบบไดนามิก
คุณใช้ "กำหนดข้อความ" เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของการตอบกลับและข้อความคำขอได้
หากต้องการฝังตัวแปรการไหลของ Edge ในเพย์โหลด XML ให้รวมตัวแปรที่กำหนดไว้ในวงเล็บปีกกาดังนี้ {prefix.name}
ตัวอย่างต่อไปนี้ฝังค่าตัวแปรโฟลว์ของส่วนหัว HTTP user-agent
ในองค์ประกอบ XML ชื่อ User-agent
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
สำหรับเพย์โหลด JSON คุณแทรกตัวแปรได้โดยใช้แอตทริบิวต์ variablePrefix
และ variableSuffix
ที่มีอักขระตัวคั่นตามที่แสดงในตัวอย่างต่อไปนี้
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
ดูรายการตัวแปรโฟลว์ทั้งหมดที่หัวข้อการอ้างอิงตัวแปรโฟลว์
ใน Cloud รุ่น 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: ตั้งค่า/รับตัวแปร
ตัวอย่างต่อไปนี้ใช้นโยบายมอบหมายข้อความ 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: รับส่วนหัวการตอบกลับไฮไลต์ของบริการ
ในตัวอย่างต่อไปนี้ สมมติว่านโยบาย ServiceAPI อยู่ในคำขอพร็อกซี 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://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-urlencrypted" ก่อนส่งข้อความไปยังบริการเป้าหมาย
<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>
) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ได้ในภายหลังในขั้นตอน หรือส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceAPI
ตัวอย่าง 3
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่ชื่อ "MyRequestObject"
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบายนโยบาย AssignMessage (เช่น <Add>
, <Set>
และ <Set>
) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ได้ในภายหลังในขั้นตอน หรือส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceAPI
ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <AssignTo>
แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
---|---|---|---|
createNew |
กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกำหนดค่าหรือไม่ หากเป็น "จริง" นโยบายจะสร้างตัวแปรใหม่ของประเภทที่ระบุโดย หากเป็น "เท็จ" นโยบายจะตอบกลับด้วย 1 ใน 2 วิธีต่อไปนี้
หากไม่ได้ระบุ
|
ไม่บังคับ | บูลีน |
transport |
ระบุประเภทการรับส่งสำหรับประเภทคำขอหรือข้อความตอบกลับ ค่าเริ่มต้นคือ "http" (ค่าที่รองรับเท่านั้น) |
ไม่บังคับ | สตริง |
type |
ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "จริง" ค่าที่ถูกต้องคือ "request" หรือ "response"
ค่าเริ่มต้นคือ "request" หากคุณไม่ระบุแอตทริบิวต์นี้ Edge จะสร้างคำขอหรือการตอบกลับโดยขึ้นอยู่กับว่านโยบายนี้จะดำเนินการที่ใด |
ไม่บังคับ | สตริง |
<AssignVariable>
กำหนดค่าให้กับตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่นโยบาย AssignMessage กำหนดค่าไว้) หากไม่มีตัวแปรโฟลว์อยู่ <AssignVariable>
จะสร้างตัวแปรนั้นขึ้นมา
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | ประเภทที่ซับซ้อน |
องค์ประกอบระดับบน |
<AssignMessage>
|
องค์ประกอบย่อย |
<Name> (ต้องระบุ)<Ref> <Template> <Value> |
ค่าที่คุณกำหนดให้กับตัวแปรโฟลว์ปลายทางอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
- สตริงตรง: ใช้องค์ประกอบย่อย
<Value>
เพื่อระบุค่าสตริงลิเทอรัลสำหรับตัวแปรโฟลว์ปลายทาง - ตัวแปรโฟลว์: ใช้องค์ประกอบย่อย
<Ref>
เพื่อระบุค่าของตัวแปรโฟลว์ที่มีอยู่สําหรับตัวแปรโฟลว์ปลายทาง ดูรายการตัวแปรทั้งหมดของโฟลว์ที่ใช้เป็นแหล่งที่มาได้ที่หัวข้อการอ้างอิงตัวแปรโฟลว์ - เทมเพลตข้อความ: ใช้องค์ประกอบย่อย
<Template>
เพื่อระบุเทมเพลตข้อความสำหรับตัวแปรโฟลว์ปลายทาง
องค์ประกอบ <AssignVariable>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
ใช้องค์ประกอบ <Ref>
เพื่อระบุตัวแปรต้นทาง หากเข้าถึงตัวแปรที่ <Ref>
อ้างอิงไม่ได้ Edge จะใช้ค่าที่องค์ประกอบ <Value>
ระบุไว้ หากคุณกำหนด <Template>
ระบบจะให้ความสำคัญกับองค์ประกอบนั้นเหนือองค์ประกอบย่อยอื่นๆ
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่าของตัวแปรใหม่ myvar
เป็นค่าลิเทอรัล "42"
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้กำหนดค่าของตัวแปรโฟลว์ request.header.user-agent
ให้กับตัวแปรโฟลว์ปลายทาง myvar
และค่าของพารามิเตอร์การค้นหา country
ให้กับตัวแปรโฟลว์ปลายทาง Country
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
หากการมอบหมายอย่างใดอย่างหนึ่งล้มเหลว Edge จะกำหนดค่า "ErrorOnCopy" ให้กับตัวแปรโฟลว์ปลายทางแทน
หากไม่มีตัวแปรโฟลว์ myvar
หรือ Country
อยู่ <AssignVariable>
จะสร้างตัวแปรเหล่านั้น
ตัวอย่าง 3
ตัวอย่างต่อไปนี้ใช้องค์ประกอบย่อย <Template>
เพื่อเชื่อมตัวแปรบริบท 2 รายการด้วยสตริงตามตัวอักษร (ขีดกลาง) ระหว่างตัวแปรดังกล่าว
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
การใช้งานทั่วไปสำหรับ <AssignVariable>
คือการตั้งค่าเริ่มต้นสำหรับพารามิเตอร์การค้นหา ส่วนหัว หรือค่าอื่นๆ ที่ส่งไปพร้อมกับคำขอได้ ซึ่งทำได้โดยใช้องค์ประกอบย่อย <Ref>
และ <Value>
ร่วมกัน ดูข้อมูลเพิ่มเติมได้ในตัวอย่างของ <Ref>
<Name>
(รายการย่อยของ <AssignVariable>
)
ระบุชื่อของตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่นโยบาย AssignMessage กำหนดค่าไว้) หากไม่มีตัวแปรที่มีชื่อใน <AssignVariable>
นโยบายจะสร้างตัวแปรที่มีชื่อนั้น
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ต้องระบุ |
ประเภท | สตริง |
องค์ประกอบระดับบน |
<AssignVariable>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Name>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ระบุตัวแปรปลายทางเป็น myvar
และตั้งเป็นค่าลิเทอรัล "42"
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
หากไม่มี myvar
อยู่ <AssignVariable>
จะสร้างขึ้นมา
<Ref>
(รายการย่อยของ <AssignVariable>
)
ระบุแหล่งที่มาของการมอบหมายเป็นตัวแปรโฟลว์ ตัวแปรโฟลว์อาจเป็นตัวแปรโฟลว์ที่กําหนดไว้ล่วงหน้า (ตามที่ระบุไว้ในการอ้างอิงตัวแปรโฟลว์) หรือตัวแปรโฟลว์ที่กําหนดเองที่คุณสร้างขึ้น
ระบบจะตีความค่าของ <Ref>
เป็นตัวแปรโฟลว์เสมอ โดยคุณจะระบุสตริงลิเทอรัลเป็นค่าไม่ได้ หากต้องการระบุค่าสตริงตามตัวอักษร ให้ใช้องค์ประกอบ <Value>
แทน
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริง |
องค์ประกอบระดับบน |
<AssignVariable>
|
องค์ประกอบย่อย | ไม่มี |
เมื่อคุณระบุตัวแปรโฟลว์ด้วย <Ref>
ให้ข้ามวงเล็บปีกกา "{}" ที่โดยปกติแล้วคุณจะใช้เพื่ออ้างอิงตัวแปรโฟลว์ เช่น หากต้องการตั้งค่าตัวแปรใหม่เป็นค่าของตัวแปรโฟลว์ client.host
ให้ทำดังนี้
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 รายการ
ตัวอย่างที่ 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
Use Case ที่พบบ่อยสำหรับ <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>
เป็น "true" Edge จะแสดงข้อผิดพลาด
<Template>
(รายการย่อยของ <AssignVariable>
)
ระบุเทมเพลตข้อความ เทมเพลตข้อความช่วยให้คุณแทนที่สตริงตัวแปรได้เมื่อนโยบายทำงาน และรวมสตริงตามตัวอักษรเข้ากับชื่อตัวแปรที่คั่นด้วยวงเล็บปีกกาได้ นอกจากนี้ เทมเพลตข้อความยังรองรับ ฟังก์ชันต่างๆ เช่น การ Escape และการแปลงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ใช้แอตทริบิวต์ ref
เพื่อระบุตัวแปรโฟลว์ที่ค่าของตัวแปรเป็นเทมเพลตข้อความ เช่น คุณจัดเก็บเทมเพลตข้อความไว้เป็นแอตทริบิวต์ที่กำหนดเองในแอปของนักพัฒนาซอฟต์แวร์ได้ เมื่อ Edge ระบุแอปของนักพัฒนาซอฟต์แวร์หลังจากที่ยืนยันคีย์ API หรือโทเค็นความปลอดภัย (ผ่านนโยบายเพิ่มเติม) แล้ว องค์ประกอบ <AssignVariable>
จะใช้เทมเพลตข้อความจากแอตทริบิวต์ที่กำหนดเองของแอปได้ ซึ่งจะพร้อมใช้งานเป็นตัวแปรโฟลว์จากนโยบายความปลอดภัย ตัวอย่างต่อไปนี้ถือว่าเทมเพลตข้อความพร้อมใช้งานในแอตทริบิวต์ของลูกค้าที่ชื่อว่า message_template
ในแอปนักพัฒนาแอปที่เรียก API ซึ่งใช้นโยบายยืนยัน APIKey เพื่อยืนยันคีย์ 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
ตัวอย่างต่อไปนี้ระบุตัวแปรโฟลว์และค่าข้อความ ในกรณีนี้ หากตัวแปรที่อ้างอิงเป็นค่าที่ไม่ใช่ค่าว่าง ระบบจะใช้ค่านั้นเป็นเทมเพลต หากค่าที่อ้างอิงเป็นค่าว่าง ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {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-urlencrypted" ก่อนส่งข้อความไปยังบริการเป้าหมาย
<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" และค่าที่สองของ "h3" หาก "h3" มีเพียงค่าเดียว ระบบจะไม่คัดลอกค่าดังกล่าว
<Path>
(รายการย่อยของ <Copy>
)
กำหนดว่าควรคัดลอกเส้นทางจากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อการตอบสนอง
หากเป็น "จริง" นโยบายนี้จะคัดลอกเส้นทาง from ข้อความคำขอที่ระบุโดยแอตทริบิวต์ 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>
)
กำหนดว่าควรคัดลอกเพย์โหลดจากต้นทางไปยังปลายทางหรือไม่ ต้นทางและปลายทางอาจเป็นคำขอหรือการตอบกลับก็ได้
หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลด from ข้อความที่แอตทริบิวต์ 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>
เป็น "จริง" เพื่อให้ระบบคัดลอกเพย์โหลดของคำขอจากคำขอไปยังการตอบกลับ
<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
from การตอบกลับที่ระบุโดยแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังการตอบกลับที่ระบุโดยองค์ประกอบ <AssignTo>
ค่าเริ่มต้น | ไม่จริง |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | บูลีน |
องค์ประกอบระดับบน |
<Copy>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <ReasonPhrase>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่า <ReasonPhrase>
เป็น "จริง" ซึ่งทำให้ <Copy>
คัดลอกวลีเหตุผลจากการตอบกลับเริ่มต้นไปยังออบเจ็กต์การตอบกลับที่กําหนดเอง
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
คุณจะใช้ <ReasonPhrase>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<StatusCode>
(รายการย่อยของ <Copy>
)
กำหนดว่ารหัสสถานะจะคัดลอกจากการตอบสนองต้นทางไปยังการตอบกลับปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำขอ
หากเป็น "จริง" นโยบายนี้จะคัดลอกรหัสสถานะ from ข้อความตอบกลับที่ระบุโดยแอตทริบิวต์ 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>
เป็น "จริง"
<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>
เป็น "จริง" ซึ่งจะคัดลอกกริยาจากคําขอเริ่มต้นไปยังคําขอใหม่ที่กําหนดเอง
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
คุณจะใช้ <Verb>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version>
(รายการย่อยของ <Copy>
)
กำหนดว่าจะคัดลอกเวอร์ชัน HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อการตอบสนอง
หากเป็น "true" ให้คัดลอกเวอร์ชัน HTTP ที่พบในแอตทริบิวต์ source
ขององค์ประกอบ <Copy>
ไปยังออบเจ็กต์ที่ระบุโดยองค์ประกอบ <AssignTo>
ค่าเริ่มต้น | ไม่จริง |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | บูลีน |
องค์ประกอบระดับบน |
<Copy>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่า <Version>
เป็น "จริง" ในคำขอ ซึ่งจะคัดลอกเวอร์ชันจากออบเจ็กต์คำขอเริ่มต้นไปยังออบเจ็กต์คำขอใหม่แบบกำหนดเอง
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
คุณจะใช้ <Version>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่ออื่นที่ฟังดูเป็นธรรมชาติมากขึ้น
องค์ประกอบ <DisplayName>
เหมือนกันในนโยบายทั้งหมด
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ หากไม่ระบุ <DisplayName> ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย |
ประเภท | สตริง |
องค์ประกอบระดับบน | <PolicyElement> |
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <DisplayName>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
ตัวอย่าง
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
องค์ประกอบ <DisplayName>
ไม่มีแอตทริบิวต์หรือองค์ประกอบย่อย
<IgnoreUnresolvedVariables>
กำหนดว่าการประมวลผลจะหยุดหรือไม่เมื่อพบตัวแปรที่ยังไม่ได้แก้ไข
ค่าเริ่มต้น | ไม่จริง |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | บูลีน |
องค์ประกอบระดับบน |
<AssignMessage>
|
องค์ประกอบย่อย | ไม่มี |
ตั้งค่าเป็น true
เพื่อละเว้นตัวแปรที่ยังไม่ได้แก้ไขและดำเนินการประมวลผลต่อ หากไม่ใช่ false
ค่าเริ่มต้นคือ false
การตั้งค่า <IgnoreUnresolvedVariables>
เป็น true
แตกต่างจากการตั้งค่า continueOnError
ของ <AssignMessage>
เป็น true
ตรงที่มีไว้สำหรับการตั้งค่าและการรับค่าของตัวแปรโดยเฉพาะ หากคุณตั้งค่า continueOnError
เป็น true
แล้ว Edge จะไม่สนใจข้อผิดพลาดทั้งหมด ไม่ใช่แค่ข้อผิดพลาดที่พบเมื่อใช้ตัวแปร
องค์ประกอบ <IgnoreUnresolvedVariables>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่า <IgnoreUnresolvedVariables>
เป็น "จริง"
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์ของแบบฟอร์ม และ/หรือเพย์โหลดของข้อความออกจากข้อความ โดยข้อความอาจเป็นคำขอหรือการตอบกลับก็ได้ คุณระบุได้ว่าข้อความใด <Remove>
จะทํางานโดยใช้องค์ประกอบ <AssignTo>
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | ประเภทที่ซับซ้อน |
องค์ประกอบระดับบน |
<AssignMessage>
|
องค์ประกอบย่อย |
<FormParams> <Headers> <Payload> <QueryParams> |
Use Case ที่พบบ่อยสำหรับ <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-url encrypted"
<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 |
(ไม่บังคับ) ระบุตัวคั่นนำหน้าในตัวแปรโฟลว์ ค่าเริ่มต้นคือ "{" ดูข้อมูลเพิ่มเติมได้ที่การอ้างอิงตัวแปรโฟลว์ | ไม่บังคับ | ถ่าน |
variableSuffix |
(ไม่บังคับ) ระบุตัวคั่นต่อท้ายในตัวแปรโฟลว์ ค่าเริ่มต้นคือ "}" ดูข้อมูลเพิ่มเติมได้ที่การอ้างอิงตัวแปรโฟลว์ | ไม่บังคับ | ถ่าน |
<QueryParams>
(รายการย่อยของ <Set>
)
เขียนทับพารามิเตอร์การค้นหาที่มีอยู่ในคำขอด้วยค่าใหม่ องค์ประกอบนี้ไม่มีผลต่อการตอบสนอง
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | อาร์เรย์ขององค์ประกอบ <QueryParam> |
องค์ประกอบระดับบน |
<Set>
|
องค์ประกอบย่อย |
<QueryParam> |
องค์ประกอบ <QueryParams>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งค่าพารามิเตอร์การค้นหา "address" เป็นค่าของตัวแปร request.header.address
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
คุณจะใช้ <QueryParams>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
หากคุณกำหนดพารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย (<Set><QueryParams/></Set>
) นโยบายจะไม่ตั้งค่าพารามิเตอร์การค้นหาใดๆ เช่นเดียวกับการละเว้น <QueryParams>
<ReasonPhrase>
(รายการย่อยของ <Set>
)
กำหนดวลีเหตุผลในคำตอบ ซึ่งโดยปกติจะใช้สำหรับการแก้ไขข้อบกพร่องร่วมกับ <StatusCode>
องค์ประกอบนี้ไม่มีผลต่อคำขอ
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริง |
องค์ประกอบระดับบน |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <ReasonPhrase>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้กำหนดวลีเหตุผลง่ายๆ
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <ReasonPhrase>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่อยู่ในวงเล็บปีกกาขณะรันไทม์ด้วยค่าของตัวแปรที่อ้างอิง ตามตัวอย่างต่อไปนี้
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
คุณจะใช้ <ReasonPhrase>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<StatusCode>
(รายการย่อยของ <Set>
)
ตั้งรหัสสถานะในคำตอบ องค์ประกอบนี้ไม่มีผลต่อคำขอ
ค่าเริ่มต้น | "200" (เมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "จริง") |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบระดับบน |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้เป็นการตั้งค่ารหัสสถานะที่เรียบง่าย
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <StatusCode>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่อยู่ในวงเล็บปีกกาขณะรันไทม์ด้วยค่าของตัวแปรที่อ้างอิง ตามตัวอย่างต่อไปนี้
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
คุณจะใช้ <StatusCode>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<Verb>
(รายการย่อยของ <Set>
)
ตั้งค่ากริยา HTTP ในคำขอ องค์ประกอบนี้ไม่มีผลต่อการตอบสนอง
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบระดับบน |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Verb>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้กำหนดกริยาง่ายๆ ในคำขอ
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <Verb>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่อยู่ในวงเล็บปีกกาขณะรันไทม์ด้วยค่าของตัวแปรที่อ้างอิง
ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อเติมคำกริยา
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
คุณจะใช้ <Verb>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version>
(รายการย่อยของ <Set>
)
ตั้งค่าเวอร์ชัน HTTP ในคำขอ องค์ประกอบนี้ไม่มีผลต่อการตอบสนอง
ค่าเริ่มต้น | ไม่มี |
ต้องระบุหรือไม่ | ไม่บังคับ |
ประเภท | สตริงหรือ variable |
องค์ประกอบระดับบน |
<Set>
|
องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version>
ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้กำหนดหมายเลขเวอร์ชันเป็น "1.1"
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ใช้ตัวแปรในวงเล็บปีกกาเพื่อตั้งค่าหมายเลขเวอร์ชัน
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
ระบบจะถือว่าเนื้อหาของ <Version>
เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่อยู่ในวงเล็บปีกกาขณะรันไทม์ด้วยค่าของตัวแปรที่อ้างอิง
คุณจะใช้ <Version>
ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
สร้างข้อความคำขอที่กำหนดเอง
คุณใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอที่กำหนดเอง หลังจากสร้างคำขอที่กำหนดเองแล้ว คุณจะใช้คำขอดังกล่าวได้ด้วยวิธีต่อไปนี้
- เข้าถึงตัวแปรในนโยบายอื่นๆ
- ส่งต่อไปยังบริการภายนอก
หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo>
ในนโยบาย AssignMessage ตั้งค่า createNew
เป็น "จริง" และระบุชื่อข้อความใหม่ในส่วนเนื้อหาขององค์ประกอบตามตัวอย่างต่อไปนี้
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
โดยค่าเริ่มต้น Edge จะไม่ดำเนินการใดๆ กับข้อความคำขอที่กำหนดเอง หลังจากที่สร้าง Edge จะดำเนินการต่อไปตามคำขอเดิม หากต้องการใช้คำขอที่กำหนดเอง ให้เพิ่มนโยบาย เช่น นโยบาย ServiceAPI ลงในพร็อกซีที่สามารถส่งคำขอที่กำหนดเองไปยังบริการภายนอกได้
ตัวอย่างต่อไปนี้สร้างข้อความคำขอที่กำหนดเอง
ตัวอย่างที่ 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>
เป็น "เท็จ" เมื่อ<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 |
สร้าง Mock 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> ของนโยบาย Assign Message
เป็น 0 หรือหมายเลขลบ จะทำให้การทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จ
|
build |
InvalidVariableName |
หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable> การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จเนื่องจากไม่มีชื่อตัวแปรที่ถูกต้องซึ่งจะกำหนดค่า ต้องระบุชื่อตัวแปรที่ถูกต้อง
|
build |
InvalidPayload |
เพย์โหลดที่ระบุในนโยบายไม่ถูกต้อง |
ตัวแปรของข้อผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาดขณะรันไทม์ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด | assignmessage.AM-SetResponse.failed = true |
ตัวอย่างการตอบกลับข้อผิดพลาด
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
ตัวอย่างกฎข้อผิดพลาด
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
สคีมา
นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd
) สคีมานโยบายมีอยู่ใน GitHub
หัวข้อที่เกี่ยวข้อง
ดูตัวอย่างการใช้งานของนโยบาย AssignMessage ในตัวอย่างแพลตฟอร์ม API
โปรดอ่านบทความของชุมชน Apigee นี้เพื่อดูตัวอย่างขั้นสูงขึ้นของวิธีลบล้าง target.url
จาก ProxyEndpoint
หากต้องการดูการทำงานของ "set path" ในนโยบาย Serviceส่วนขยายไฮไลต์ โปรดดูตัวอย่างการเรียนรู้ด้วยการทำตามนี้ในตัวอย่าง Apigee GitHub เพียงแค่โคลนที่เก็บและทำตามวิธีการในหัวข้อนั้นๆ ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบายคำขอราคาเสนอบริการเพื่อส่งคำขอไปยังบริการภายนอก