คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
![]()
อะไร
นโยบาย AssignMessage จะเปลี่ยนหรือสร้างข้อความคำขอและการตอบกลับใหม่ในระหว่างโฟลว์ของพร็อกซี API นโยบายนี้ช่วยให้คุณดำเนินการต่อไปนี้กับข้อความเหล่านั้นได้
- เพิ่มพารามิเตอร์แบบฟอร์ม ส่วนหัว หรือพารามิเตอร์การค้นหาใหม่ลงในข้อความ
- คัดลอกพร็อพเพอร์ตี้ที่มีอยู่จากข้อความหนึ่งไปยังอีกข้อความหนึ่ง
- นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดของข้อความ ออกจากข้อความ
- ตั้งค่าพร็อพเพอร์ตี้ที่มีอยู่ในข้อความ
โดยปกติแล้ว คุณจะใช้ AssignMessage Policy เพื่อเพิ่ม เปลี่ยนแปลง หรือนำพร็อพเพอร์ตี้ของคำขอหรือการตอบกลับออก อย่างไรก็ตาม คุณยังใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอหรือการตอบกลับที่กำหนดเองและส่งไปยังเป้าหมายอื่นได้ตามที่อธิบายไว้ในสร้างข้อความคำขอที่กำหนดเอง
นโยบาย AssignMessage สามารถสร้างหรือเปลี่ยนข้อความหรือตัวแปรโฟลว์ได้ ใช้นโยบายนี้เพื่อแก้ไขข้อความคำขอก่อนส่งผ่านพร็อกซีไปยังระบบต้นทาง หรือแก้ไขข้อความตอบกลับก่อนส่งต่อให้กับแอปพลิเคชันที่ใช้ API
องค์ประกอบ <AssignMessage>
กำหนดนโยบาย AssignMessage
| ค่าเริ่มต้น | ดูแท็บนโยบายเริ่มต้นด้านล่าง |
| ต้องระบุหรือไม่ | ต้องระบุ |
| ประเภท | ออบเจ็กต์ที่ซับซ้อน |
| องค์ประกอบหลัก | ไม่มี |
| องค์ประกอบย่อย |
<Add><AssignTo><AssignVariable><Copy><DisplayName><IgnoreUnresolvedVariables><Remove><Set> |
องค์ประกอบ <AssignMessage> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
องค์ประกอบ <AssignMessage> ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" !-- All AssignMessage >chi<ld >eleme<nts are op>tional <-- Add FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am < ... /FormParams > Headers < Head>er name="h<eader_na>me&qu<ot;header_v>alue/He<ader ... /Headers Q>ueryParams < QueryParam> name="que<ryparam_name>&qu<ot;q>uery<param_value/QueryParam ... /QueryParams /Add AssignTo createNew=&>quot;[true|false]" t<ransport=>&quo<t;http" > ty<pe=&>quot;[request<|resp>onse]<&qu>ot;destination_<vari>able_<name/Ass>ignTo AssignV<ariable > Namevaria<ble_name/Name Refsource_vari><able/Ref > T<empla>temessage_temp<late/T>emp<late or > Tem<plate ref='template_variable>'</Template Valuevariable_valu<e/Value />AssignVari<able Co>py sour<ce="[request|response]&quo>t; !-- Can <also be an> empty array (F<ormParams/)> --&g<t; FormParams FormPara<m name=&>quot;formp<aram_na>me"<;formparam_value/FormPara>m ... < /Fo>rmParams !-<- Can al>so be< an >empty array <(Head>ers/)< -->> Headers< H>eader< name="header_name"hea<der_value/He>ader < ... /H>eaders < Path[false|true]/Path Pay>load[false|true]</Payload > !-- Can also <be an empty >array< (QueryParam>s/) --> < QueryParam>s < QueryPa>ram name=&qu<ot;querypar>am_na<me&q>uot;querypar<am_va>lue/Q<ueryPar>am ...< /Qu>ery<Param>s < ReasonPhr>ase[false|true]/Rea<sonPhrase > St<atusCode[false|true]/Stat>usCode Verb<[false|true]/Verb Vers>ion[<false|>true]</Version /Copy DisplayNamep<olicy_displ>ay_name/Di<splayName<>/span> Igno<reUnresolvedVariables[true|fals>e] /IgnoreUnr<esolvedVar>iables Remov<e !-- C>an al<so be an empty array (FormParams</) -->>; Form<Params<>/span> F<ormParam name="formp>aram_name&qu<ot;form>param_value/For<mParam > <... > /FormParams< !--> Can <also be an empty array (Headers/<) --> > Headers < Header> name=&<quot;header_name"header_valu>e/Header .<.. /Hea>ders Payloa<d[false|true>]/P<ayload<>/span> <!--> Can <also be an> empty <array (QueryParams/) --> > QueryParams < QueryP>aram name="<;queryparam>_name<"q>uerypar<am_value/QueryParam > ... /Qu<eryPara>ms /Remove < Set > Form<Para>ms < >FormP<aram name="formparam_name"formparam_value/FormParam ... /FormParams > Headers < Hea>der n<ame="h>eader_n<ame"header_value/Header > ... /Heade<rs Path>path/Path P<ayload conte>ntTyp<e="cont>ent_type" variablePrefix=<"prefix&>quot;< v>ariableSuffix="suffix&quo<t;new_paylo>ad/Pa<yloa>d QueryParams QueryParam nam<e=&qu>ot;qu<erypara>m_name"querypar<am_va>lue</Que>ry<Param ..>. /QueryParams ReasonPhrasereason_for_error or {variable}/ReasonPhrase StatusCodeHTTP_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=&quo>t;a<ssign-messa>ge-default"< DisplayNa>meA<ssign Messa>ge-<1/DisplayName Prope>rties</ Copy> sour<ce="req>uest&<quot; H>eader<s/ Q>ueryP<arams>/ < FormParams>/ < Payload/ > Verb</ > St<atusC>ode</ >Reaso<nPhrase>/ P<ath/ /Copy Re>move < Head>ers < Header> name=&<quot;h1"/ /H>eader<s QueryP>arams< Que>ryParam< name="q1">/ < /QueryPara>ms < FormPa>ram<s > Fo<rmP>aram <name=&qu>ot;f1<"/ >/Form<Params >Pay<load>/ < /R>emove< Add > He<aders/ Q>ueryP<arams/ >FormP<aram<s/ > /A<dd >Set> <Heade>rs/< > Qu<eryParams/ > Form<Para>ms/ < !>-- Ve<rbGET/>Verb <-- > <Path/ /Set >Ass<ignVariable Namename/>Name < Value/ Ref/ /Assig>nVa<riable IgnoreUnresolvedVariablestrue /IgnoreUnresolvedV>a<riables Assi>gnTo createNew="false" transport="http" type="request"/ /AssignMessage
เมื่อคุณแทรกนโยบาย AssignMessage ใหม่ใน UI ของ Edge เทมเพลตจะมี Stub สำหรับการดำเนินการที่เป็นไปได้ทั้งหมด
โดยปกติแล้ว คุณจะเลือกการดำเนินการที่ต้องการทำกับนโยบายนี้
และนำองค์ประกอบย่อยที่เหลือออก เช่น หากต้องการดำเนินการคัดลอก ให้ใช้เอลิเมนต์
<Copy> และนำ <Add>, <Remove> และเอลิเมนต์ย่อยอื่นๆ ออกจาก
นโยบายเพื่อให้สามารถอ่านได้ง่ายขึ้น
องค์ประกอบนี้มีแอตทริบิวต์ต่อไปนี้ซึ่งมักใช้กับนโยบายทั้งหมด
| แอตทริบิวต์ | ค่าเริ่มต้น | จําเป็นไหม | คำอธิบาย |
|---|---|---|---|
name |
ไม่มีข้อมูล | จำเป็น |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ ใช้องค์ประกอบ |
continueOnError |
เท็จ | ไม่บังคับ | ตั้งค่าเป็น "false" เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทํางานที่คาดหวังตามนโยบายส่วนใหญ่ ตั้งค่าเป็น "จริง" เพื่อดําเนินการโฟลว์ข้อมูลต่อไป แม้ว่านโยบายจะล้มเหลวก็ตาม |
enabled |
จริง | ไม่บังคับ | ตั้งค่าเป็น "true" เพื่อบังคับใช้นโยบาย ตั้งค่าเป็น "false" เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังคงแนบไปกับโฟลว์ |
async |
เท็จ | เลิกใช้ | แอตทริบิวต์นี้เลิกใช้งานแล้ว |
ตารางต่อไปนี้แสดงคำอธิบายระดับสูงขององค์ประกอบย่อยของ
<AssignMessage>
| องค์ประกอบย่อย | จำเป็นหรือไม่ | คำอธิบาย |
|---|---|---|
| การดำเนินการทั่วไป | ||
<Add> |
ไม่บังคับ | เพิ่มข้อมูลลงในออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ
<AssignTo>
|
<Copy> |
ไม่บังคับ | คัดลอกข้อมูลจากข้อความที่ระบุโดยแอตทริบิวต์ source
ไปยังออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ <AssignTo> |
<Remove> |
ไม่บังคับ | ลบองค์ประกอบที่ระบุออกจากตัวแปรข้อความที่ระบุในองค์ประกอบ
<AssignTo> |
<Set> |
ไม่บังคับ | แทนที่ค่าของพร็อพเพอร์ตี้ที่มีอยู่ในการขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>
|
| องค์ประกอบย่อยอื่นๆ | ||
<AssignTo> |
ไม่บังคับ | ระบุข้อความที่นโยบาย AssignMessage ดำเนินการ ซึ่งอาจเป็นคำขอหรือการตอบกลับมาตรฐาน หรืออาจเป็นข้อความใหม่ที่กำหนดเองก็ได้ |
<AssignVariable> |
ไม่บังคับ | กำหนดค่าให้กับตัวแปรโฟลว์ หากไม่มีตัวแปร ระบบจะ<AssignVariable>สร้างตัวแปรนั้น |
<IgnoreUnresolvedVariables> |
ไม่บังคับ | กำหนดว่าจะหยุดการประมวลผลเมื่อพบตัวแปรที่ยังไม่ได้รับการแก้ไขหรือไม่ |
เราจะอธิบายองค์ประกอบย่อยแต่ละรายการเหล่านี้ในส่วนต่อไป
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณใช้ AssignMessage Policy ได้
1: เพิ่มส่วนหัว
ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัวลงในคำขอด้วยองค์ประกอบ
<Add>
<AssignMessage name="AM-add-heade>rs-<1&q>uot;
< Add
> Head<ers
Header name=&q>uot;partner-id"{verifyapikey.VAK-1.devel<oper.ap>p.par<tner-id}>/He<ader>
< /Heade>rs
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessage2: นำเพย์โหลดออก
ตัวอย่างต่อไปนี้จะลบเพย์โหลดจากการตอบกลับด้วยองค์ประกอบ <Remove>
<AssignMessage name="AM-remo>ve-<1" D>isplayNa<meremove-1/D>isp<layNam>e R<emove > P<ayloadtr>ue/<Payload> </Remove > Assign<Torespons>e</AssignTo /Ass>ignMessage
3: แก้ไขคำตอบ
ตัวอย่างต่อไปนี้แก้ไขออบเจ็กต์การตอบกลับที่มีอยู่โดยการเพิ่มส่วนหัวลงในออบเจ็กต์
<AssignMessage name="AM-modify-resp>ons<e&q>uot;
< Set
> Head<ers
Header name=&>quot;Cache-Hit"{lookupcache.Loo<kupCach>e-1.c<achehit}>/He<ader>
< /Headers
/Set
Ignor>eUnresol<vedVariablesfalse
/Ignor>eUn<resolved>Variable<s
Assig>n<Toresponse/Ass>ignTo
/AssignMessageตัวอย่างนี้ไม่ได้สร้างข้อความใหม่ แต่จะแก้ไขข้อความตอบกลับที่มีอยู่โดยการเพิ่มส่วนหัว HTTP
เนื่องจากตัวอย่างนี้ระบุ response เป็นชื่อตัวแปรในองค์ประกอบ
<AssignTo> นโยบายนี้จึงแก้ไขออบเจ็กต์การตอบกลับที่เดิม
ตั้งค่าด้วยข้อมูลที่เซิร์ฟเวอร์เป้าหมายส่งคืน
ส่วนหัว HTTP ที่นโยบายนี้เพิ่มลงในข้อความตอบกลับได้มาจากตัวแปร ที่นโยบาย LookupCache สร้างขึ้น ดังนั้นข้อความตอบกลับที่แก้ไขโดยนโยบาย Assign Message นี้จะมีส่วนหัว HTTP ที่ระบุว่าดึงผลลัพธ์จากแคชหรือไม่ การตั้งค่าส่วนหัวในการตอบกลับจะเป็นประโยชน์สำหรับการแก้ไขข้อบกพร่องและ การแก้ปัญหา
4: ตั้งค่าเนื้อหาแบบไดนามิก
คุณใช้ Assign Message เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของข้อความตอบกลับและ ข้อความคำขอได้
หากต้องการฝังตัวแปรโฟลว์ Edge ในเพย์โหลด XML ให้ครอบตัวแปรที่กำหนดด้วยวงเล็บปีกกา
ดังนี้ {prefix.name}
ตัวอย่างต่อไปนี้ฝังค่าของตัวแปรโฟลว์ส่วนหัว HTTP user-agent
ในองค์ประกอบ XML ที่ชื่อ User-agent
<AssignMessage name="AM-set-dynamic-con>ten<t"<>/span> Assign<Torespons>e/A<ssi>gnTo < Set Payload contentType=>"t<ext/xml&qu>ot; User-agent{reques<t.header.us>er-ag<ent}/Use>r-a<gent> < /Payload /Set Ignor>eUnresol<vedVariablesfalse /Ignor>e<UnresolvedVari>ables /AssignMessage
สำหรับเพย์โหลด JSON คุณสามารถแทรกตัวแปรโดยใช้แอตทริบิวต์ variablePrefix และ variableSuffix พร้อมอักขระคั่นตามที่แสดงในตัวอย่างต่อไปนี้
<AssignMessage name="set-pay>loa<d" Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" { "user<-agent&q>u<ot;: "@re>quest.header.user-agent#" } /Payload /AssignMessage
ดูรายการตัวแปรโฟลว์ทั้งหมดได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์
ตั้งแต่เวอร์ชัน 16.08.17 ของ Cloud เป็นต้นไป คุณยังใช้เครื่องหมายปีกกาเพื่อแทรกตัวแปรได้ด้วย
5: นำพารามิเตอร์การค้นหาออก
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์การค้นหา apikey ออกจากคำขอ
<AssignMessage name="AM-remove-query-p>ara<m">;
R<emove
Q>ueryPar<ams
QueryParam name>=&quo<t;apikey&quo>t;/<
/Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageแนวทางปฏิบัติแนะนำคือการนำapikeyพารามิเตอร์การค้นหาออกจากข้อความคำขอ
เมื่อใช้นโยบาย VerifyAPIKey สำหรับการตรวจสอบสิทธิ์ผู้ใช้ คุณทำเช่นนี้เพื่อป้องกันไม่ให้มีการส่งข้อมูลคีย์ที่มีความละเอียดอ่อนไปยังเป้าหมายแบ็กเอนด์
6: ตั้งค่า/รับตัวแปร
ตัวอย่างต่อไปนี้ใช้ 3 นโยบายการกำหนดข้อความ
- สร้างตัวแปรโฟลว์ 3 รายการในคำขอที่มีค่าคงที่
- รับตัวแปรโฟลว์แบบไดนามิกในนโยบายที่ 2 ในโฟลว์คำขอ
- ตั้งค่าในเพย์โหลดของการตอบกลับ
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-varia>bles&<quot; !-- Create a variable named myAp>pSecr<et -- Assi>gnVariabl<e > Namem<yAppS>ecret/Nam<e > < Val>ue42/<Value /Assi>gnVar<iable !-- Create a variable named config.envi>ronme<nt -- Assi>gnVariabl<e > Nameconfig.e<nviro>nment/Nam<e > < Value>test/<Value /Assi>gnVar<iable !-- Create a variable named config.p>rotoc<ol -- Assi>gnVariabl<e > Nameconfi<g.pro>tocol/Nam<e > V<aluego>pher/<Value /Assi>g<nVariable /Ass>ignMessage
ในนโยบายแรก องค์ประกอบ <AssignVariable> จะสร้างและตั้งค่าตัวแปร 3 รายการในคำขอ องค์ประกอบ <Name> แต่ละรายการจะระบุชื่อตัวแปร และ <Value> จะระบุค่า
นโยบายที่ 2 ใช้องค์ประกอบ <AssignVariable> เพื่ออ่านค่าและสร้างตัวแปรใหม่ 3 รายการ
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" >nam<e="get-variables" AssignTo createNew="fals>e&q<uot; transport="http" type="request"/ !-- Get t>he <value of myApp>Secre<t an>d crea<te a >new v<ari>able, secre<t --> As<signV>a<riable> < Namesecret/Na>me < RefmyAppSecret/Ref Value0/Value /AssignVariable !-- Get the value of >con<fig.environmen>t and< cre>ate a new v<ariab>le, e<nvi>ronment -- Assig<nVar>iable< >Nameenv<ironme>nt/<Name Refcon>fig<.environment/Ref Valuedefault/Value /AssignVariable !-- Get the val>ue <of config.prot>ocol <and >create a< new >varia<ble>, protocol -- < Ass>ignVa<riabl>e N<amepro>toc<ol/Name Ref>con<fig.protocol/Ref Valu>edef<ault/Value /AssignVariab>l<e IgnoreUnre>solvedVariablestrue/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=&qu>ot;<put-em-in-t>he-payload" Di<splayNameput>-em<-in>-the-<payload/DisplayName Set Payload> conten<tType=&>quot;appl<icatio>n/xml&qu<ot; > wrappe<r > secret{<secret}/sec>ret c<onfig > environ<ment{env>ironment}/<environme>nt < pro>tocol{p<rotocol}>/prot<ocol > < /c>onf<ig /wrapper /Pa>yload < /Set IgnoreUnresolvedVa>ria<blestrue /IgnoreUnresolvedVariables AssignTo createNew=&>q<uot;false">; transport="http" type="response"/ /AssignMessage
โปรดทราบว่าไวยากรณ์ในการเข้าถึงตัวแปรโฟลว์ใน
<Set>คือการใส่วงเล็บปีกกา ครอบตัวแปรอย่าลืมตั้งค่าแอตทริบิวต์
contentTypeขององค์ประกอบ<Payload>เป็น "application/xml" - ส่งคำขอไปยังพร็อกซี API เช่น
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
คุณสามารถส่งผลลัพธ์ผ่านยูทิลิตี เช่น
xmllintเพื่อให้ XML แสดงในโครงสร้างที่มีการจัดรูปแบบอย่างเหมาะสมได้ (ไม่บังคับ)curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
เนื้อหาของการตอบกลับควรมีลักษณะดังนี้
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: รับส่วนหัวการตอบกลับของข้อความไฮไลต์บริการ
ในตัวอย่างต่อไปนี้ สมมติว่ามีนโยบาย ServiceCallout ในคำขอพร็อกซี API
และการตอบกลับของ Callout มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน
(Set-Cookie) สมมติว่าตัวแปรการตอบกลับของ Service Callout เป็นค่าเริ่มต้น
calloutResponse นโยบายต่อไปนี้จะรับค่าส่วนหัว Set-Cookie
รายการที่ 2
<AssignMessage name="AM-Payload-from-SC-he>ade<r&q>uot; < Set Payload contentType="ap>plication/json" {"Cookies from Service Callout":" {calloutR<esponse.>hea<der.>Set<-Cookie.2}"} /Pa>yload < /Set IgnoreUnresolvedVa>ria<blestrue> /Igno<reUnresol>v<edVariables >AssignToresponse/AssignTo /AssignMessage
หากต้องการแสดงค่าส่วนหัวทั้งหมด ให้ใช้ตัวแปรต่อไปนี้แทน
{calloutResponse.header.Set-Cookie.values}องค์ประกอบย่อยแต่ละรายการในการอ้างอิงนี้มีตัวอย่างเพิ่มเติม ดูตัวอย่างเพิ่มเติมได้ที่ ตัวอย่าง AssignMessage ใน GitHub
การอ้างอิงองค์ประกอบย่อย
ส่วนนี้จะอธิบายองค์ประกอบย่อยของ <AssignMessage>
<Add>
เพิ่มข้อมูลลงในคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>
องค์ประกอบ <Add> จะเพิ่มพร็อพเพอร์ตี้ใหม่ในข้อความที่ไม่มีอยู่ในข้อความต้นฉบับ
หากต้องการเปลี่ยนค่าของพร็อพเพอร์ตี้ที่มีอยู่ ให้ใช้องค์ประกอบ <Set>
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | ประเภทที่ซับซ้อน |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย |
<FormParams><Headers><QueryParams> |
องค์ประกอบ <Add> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_na>me"<;
Add
FormParams
F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
< ...
/FormParams
> Headers
< Head>er name="h<eader_na>me&qu<ot;header_v>alue/He<ader
...
/Headers
Q>ueryParams
< QueryParam> name="que<ryparam_name>&qu<ot;q>u<eryparam_value>/QueryParam
...
/QueryParams
/Add
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <FormParams> เพื่อรับค่าของ
พารามิเตอร์สตริงการค้นหา 3 รายการจากคำขอเริ่มต้น และตั้งค่าเป็นพารามิเตอร์แบบฟอร์มใน
คำขอปลายทางเป้าหมาย
<AssignMessage name="AM-add-formpara>ms-<3&q>uot;
< Add
>FormPar<ams
FormParam name=>"username"{requ<est.queryp>aram.na<me}/FormParam
FormP>aram name="zip_code&quo<t;{request>.queryp<aram.zipCode}/FormParam
For>mParam name="default<_language&>quot;<{request.qu>ery<para>m.l<ang}/F>ormPa<ram
/For>mPa<rams
>/Ad<d
Remo>ve
<QueryPara>m<s/
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <Headers> เพื่อเพิ่มส่วนหัว partner-id ลงในคำขอที่จะส่งไปยังปลายทางเป้าหมาย
<AssignMessage name="AM-add-heade>rs-<1&q>uot;
< Add
> Head<ers
Header name=&q>uot;partner-id"{verifyapikey.VAK-1.devel<oper.ap>p.par<tner-id}>/He<ader>
< /Heade>rs
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 3
ตัวอย่างต่อไปนี้ใช้แท็ก <QueryParams> เพื่อเพิ่มพารามิเตอร์การค้นหาเดียวที่มีค่าแบบคงที่ลงในคำขอ
<AssignMessage name="AM-add-querypara>ms-<1&q>uot;
< Add
Q>ueryPar<ams
QueryParam name>=&<quot;myPara>m&quo<t;42/QueryPa>ram<
> /Q<ueryPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่างนี้ใช้ <Add> ในโฟลว์ก่อนคำขอ หากดูผลลัพธ์ในเครื่องมือ
เช่น เครื่องมือติดตาม คำขอไปยัง https://example-target.com/get จะกลายเป็น
https://example-target.com/get?myParam=42
องค์ประกอบย่อยของ <Add> รองรับการแทนที่สตริงแบบไดนามิกที่เรียกว่า
การสร้างเทมเพลตข้อความ
<FormParams> (บุตรของ <Add>)
เพิ่มพารามิเตอร์แบบฟอร์มใหม่ลงในข้อความคำขอ องค์ประกอบนี้ไม่มีผลต่อข้อความตอบกลับ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> |
| องค์ประกอบหลัก |
<Add>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Add FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/FormParam ... /FormParams AssignTo createNew="[true|false]&qu>ot; transport="http&<quot; > ty<pe=&>q<uot;[request|r>esponse]"destination_variable_name/AssignTo /Add /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์แบบฟอร์มเดียว ("answer") และค่าคงที่ ("42") ลงในคำขอ
<AssignMessage name="AM-add-formpara>ms-<1&q>uot;
< Add
>FormPar<ams
FormParam nam>e=<"answ>er&qu<ot;42/FormP>ara<m
> /<FormPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 2
ตัวอย่างต่อไปนี้จะรับค่าของพารามิเตอร์การค้นหา name และ
เพิ่มค่าดังกล่าวลงในคำขอเป็นพารามิเตอร์แบบฟอร์ม จากนั้นจึงนำพารามิเตอร์การค้นหาออก
<AssignMessage name="AM-Swap-QueryParam-to-FormPa>ram<s&q>uot;
< Add
FormParam n>ame="name"{requ<est.queryp>ara<m.na>me}</FormP>aram
< /Add
Remove
Que>ryP<aram na>m<e="name&q>uot;/
/Remove
/AssignMessageโปรดทราบว่าตัวอย่างนี้ไม่ได้ระบุเป้าหมายที่มี <AssignTo> นโยบายนี้จะเพิ่มพารามิเตอร์
ลงในคำขอเท่านั้น
ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์แบบฟอร์มหลายรายการลงในคำขอ
<AssignMessage name="AM-add-formpara>ms-<3&q>uot;
< Add
>FormPar<ams
FormParam name=>"username"{requ<est.queryp>aram.na<me}/FormParam
FormP>aram name="zip_code&quo<t;{request>.queryp<aram.zipCode}/FormParam
For>mParam name="default<_language&>quot;<{request.qu>ery<para>m.l<ang}/F>ormPa<ram
/For>mPa<rams
>/Ad<d
Remo>ve
<QueryPara>m<s/
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่างนี้จะรับพารามิเตอร์สตริงการค้นหาจากคำขอต้นทางและเพิ่มเป็นพารามิเตอร์แบบฟอร์มที่มีชื่อต่างกัน จากนั้นจะนำพารามิเตอร์การค้นหาเดิมออก Apigee จะส่งคำขอที่แก้ไขแล้วไปยังปลายทางเป้าหมาย
คุณใช้เครื่องมือติดตามเพื่อดูโฟลว์ได้ คุณจะเห็นว่าเนื้อหาของคำขอ มีข้อมูลแบบฟอร์มที่เข้ารหัส URL ซึ่งเดิมส่งเป็นสตริงคำค้นหา พารามิเตอร์
username=nick&zip_code=90210&default_language=en
คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: POST
- ประเภทข้อความ: คำขอ
- อย่างใดอย่างหนึ่ง (หรือทั้ง 2 อย่าง) ต่อไปนี้
- ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่ง หรือ "" (สตริงว่างเปล่า) เช่น หากใช้
curlให้เพิ่ม-d ""ลงในคำขอ - ส่วนหัว
Content-Length: ตั้งค่าเป็น 0 (หากไม่มีข้อมูลในคำขอเดิม มิฉะนั้นให้ตั้งค่าเป็นความยาวปัจจุบันในหน่วยไบต์) เช่น ใช้curlเพิ่ม-H "Content-Length: 0"ในคำขอ
- ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่ง หรือ "" (สตริงว่างเปล่า) เช่น หากใช้
เช่น
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
เมื่อคุณเพิ่ม <FormParams> Edge จะตั้งค่าส่วนหัว Content-Type ของคำขอเป็น
"application/x-www-form-urlencoded" ก่อนที่จะส่งข้อความไปยังบริการเป้าหมาย
<Headers> (บุตรของ <Add>)
เพิ่มส่วนหัวใหม่ไปยังคำขอหรือการตอบกลับที่ระบุ ซึ่งระบุโดยองค์ประกอบ
<AssignTo>
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <Header> |
| องค์ประกอบหลัก |
<Add>
|
| องค์ประกอบย่อย |
<Header> |
องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy>_name&q<uot;
Add
Headers
> Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
> ...
/Headers
/Add
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัว partner-id ลงในข้อความคำขอ และ
กำหนดค่าของตัวแปรโฟลว์ verifyapikey.VAK-1.developer.app.partner-id ให้กับส่วนหัวนั้น
<AssignMessage name="AM-add-heade>rs-<1&q>uot;
< Add
> Head<ers
Header name=&q>uot;partner-id"{verifyapikey.VAK-1.devel<oper.ap>p.par<tner-id}>/He<ader>
< /Heade>rs
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessage<QueryParams> (บุตรของ <Add>)
เพิ่มพารามิเตอร์การค้นหาใหม่ลงในคำขอ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <QueryParam> |
| องค์ประกอบหลัก |
<Add>
|
| องค์ประกอบย่อย |
<QueryParam> |
องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_nam>e"<
Add
QueryParams
Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
..>.
/QueryParams
/Add
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์การค้นหา "myParam" ลงในคำขอและกำหนดค่า "42" ให้กับพารามิเตอร์ดังกล่าว
<AssignMessage name="AM-add-querypara>ms-<1&q>uot;
< Add
Q>ueryPar<ams
QueryParam name>=&<quot;myPara>m&quo<t;42/QueryPa>ram<
> /Q<ueryPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageคุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
นอกจากนี้ คุณจะตั้งค่าพารามิเตอร์การค้นหาได้ก็ต่อเมื่อแอตทริบิวต์ type ขององค์ประกอบ <AssignTo> เป็นข้อความคำขอ การตั้งค่าในคำตอบจะไม่มีผล
หากคุณกําหนดอาร์เรย์พารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย
(<Add><QueryParams/></Add>) นโยบายจะไม่เพิ่มพารามิเตอร์การค้นหาใดๆ
ซึ่งเหมือนกับการละเว้น <QueryParams>
<AssignTo>
กำหนดออบเจ็กต์ที่นโยบาย AssignMessage จะทำงานด้วย ตัวเลือกมีดังนี้
- ข้อความคำขอ:
requestที่พร็อกซี API ได้รับ - ข้อความตอบกลับ:
responseที่เซิร์ฟเวอร์เป้าหมายส่งกลับมา - ข้อความที่กำหนดเอง: ออบเจ็กต์คำขอหรือการตอบกลับที่กำหนดเอง
โปรดทราบว่าในบางกรณี คุณจะเปลี่ยนออบเจ็กต์ที่นโยบาย AssignMessage ทำงานไม่ได้
เช่น คุณไม่สามารถใช้ <Add> หรือ <Set> เพื่อเพิ่มหรือเปลี่ยนพารามิเตอร์การค้นหา
(<QueryParams>) หรือพารามิเตอร์แบบฟอร์ม (<FormParams>) ในการตอบกลับ คุณ
แก้ไขพารามิเตอร์การค้นหาและพารามิเตอร์แบบฟอร์มในคำขอได้เท่านั้น
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย | ไม่มี |
หากคุณไม่ได้ระบุ <AssignTo> หรือหากระบุองค์ประกอบ <AssignTo> แต่ไม่ได้ระบุค่าข้อความสำหรับองค์ประกอบดังกล่าว นโยบายจะดำเนินการกับคำขอหรือการตอบกลับเริ่มต้น ซึ่งอิงตามตำแหน่งที่นโยบายดำเนินการ หากนโยบายทำงานในขั้นตอนการส่งคำขอ นโยบายจะมีผลกับข้อความคำขอ หากดำเนินการในขั้นตอนการตอบกลับ นโยบายจะมีผลต่อการตอบกลับ
โดยค่าเริ่มต้น
องค์ประกอบ <AssignTo> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" AssignTo createNew="[true|false]" transp>ort="http" <type=&quo>t<;[request|resp>onse]"destination_variable_name/AssignTo /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ระบุว่าเป้าหมายคือคำขอดั้งเดิมที่จะส่งไปยัง ปลายทางเป้าหมาย
<AssignMessage name="assign>t<o-1" !-- DO NOT >do <this -- AssignTo createNew="false" transport=&q>u<ot;http" >type="request"/ /AssignMessage
ตัวอย่าง 2
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Copy>) จะทำงานกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนต่อๆ ไปได้ หรือจะส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceCallout ก็ได้
ตัวอย่าง 3
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่ชื่อ "MyRequestObject"
<AssignMessage name="assign>to-<2" AssignTo createNew="true" transport=&"http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo /AssignMessage
เมื่อคุณสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Copy>) จะทำงานกับออบเจ็กต์คำขอใหม่นั้น
คุณเข้าถึงออบเจ็กต์คำขอใหม่ในนโยบายอื่นๆ ในขั้นตอนต่อๆ ไปได้ หรือจะส่งออบเจ็กต์คำขอใหม่ไปยังบริการภายนอกด้วยนโยบาย ServiceCallout ก็ได้
ตารางต่อไปนี้จะอธิบายแอตทริบิวต์ของ <AssignTo>
| แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
|---|---|---|---|
createNew |
กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกำหนดค่าหรือไม่ หากเป็น "จริง" นโยบายจะสร้างตัวแปรใหม่ของประเภทที่ระบุโดย หากเป็น "false" นโยบายจะตอบกลับด้วยวิธีใดวิธีหนึ่งต่อไปนี้
หากไม่ได้ระบุ
|
ไม่บังคับ | บูลีน |
transport |
ระบุประเภทการรับส่งสำหรับประเภทข้อความคำขอหรือการตอบกลับ ค่าเริ่มต้นคือ "http" (ค่าเดียวที่รองรับ) |
ไม่บังคับ | สตริง |
type |
ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "จริง" ค่าที่ใช้ได้
คือ "request" หรือ "response"
หากคุณละเว้นแอตทริบิวต์นี้ Edge จะสร้างคำขอหรือการตอบกลับ ขึ้นอยู่กับว่านโยบายนี้ดำเนินการที่ใดในโฟลว์ |
ไม่บังคับ | สตริง |
<AssignVariable>
กำหนดค่าให้กับตัวแปรโฟลว์ หากไม่มีตัวแปรโฟลว์ <AssignVariable> จะสร้างตัวแปรดังกล่าว
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | ประเภทที่ซับซ้อน |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย |
<Name> (ต้องระบุ)<Ref><Template><Value> |
ค่าที่คุณกําหนดให้กับตัวแปรโฟลว์อาจเป็นค่าใดค่าหนึ่งต่อไปนี้
- สตริงตามตัวอักษร: ใช้องค์ประกอบย่อย
<Value>เพื่อระบุค่าสตริงตามตัวอักษรสำหรับตัวแปรโฟลว์ - ตัวแปรโฟลว์: ใช้องค์ประกอบย่อย
<Ref>เพื่อระบุค่าของตัวแปรโฟลว์ที่มีอยู่สำหรับตัวแปรโฟลว์ปลายทาง ดูรายการตัวแปรโฟลว์ ทั้งหมดที่ใช้เป็นแหล่งที่มาได้ที่การอ้างอิงตัวแปรโฟลว์ - เทมเพลตข้อความ: ใช้องค์ประกอบย่อย
<Template>เพื่อระบุเทมเพลตข้อความที่จะ ประมาณค่าในช่วง เพื่อรับค่าที่จะวางลงในตัวแปรโฟลว์ปลายทาง
องค์ประกอบ <AssignVariable> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame < Refso>urce_variable/Re<f Tem>platemessage<_template/Template or Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate Value>v<ariable_value/>Value /AssignVariable /AssignMessage
ใช้องค์ประกอบ <Ref> เพื่อระบุตัวแปรแหล่งที่มา หากตัวแปรที่อ้างอิงโดย <Ref> เข้าถึงไม่ได้ Edge จะใช้ค่าที่ระบุโดยองค์ประกอบ <Value> หากคุณกำหนด <Template> องค์ประกอบดังกล่าวจะมีความสำคัญเหนือกว่าองค์ประกอบย่อยอื่นๆ
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่าตัวแปรใหม่ myvar เป็นค่าตามตัวอักษร "42"
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะกำหนดค่าของตัวแปรโฟลว์ request.header.user-agent ให้กับตัวแปรโฟลว์ปลายทาง myvar
และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปรโฟลว์ปลายทาง Country
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
หากการกำหนดค่าใดค่าหนึ่งล้มเหลว Edge จะกำหนดค่า "ErrorOnCopy" ให้กับตัวแปรโฟลว์ปลายทางแทน
หากไม่มีตัวแปรโฟลว์ myvar หรือ Country
<AssignVariable> จะสร้างตัวแปรเหล่านั้น
ตัวอย่าง 3
ตัวอย่างต่อไปนี้ใช้องค์ประกอบย่อย <Template>
เพื่อเชื่อมตัวแปรบริบท 2 ตัว
กับสตริงตัวอักษร (ยัติภังค์) ระหว่างตัวแปรทั้ง 2
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
โดยทั่วไปแล้ว <AssignVariable> ใช้เพื่อตั้งค่าเริ่มต้นสำหรับพารามิเตอร์การค้นหา ส่วนหัว หรือ
ค่าอื่นๆ ที่ส่งไปพร้อมกับคำขอได้ ซึ่งทำได้โดยใช้ทั้งองค์ประกอบย่อย <Ref> และ <Value> ร่วมกัน ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างสำหรับ <Ref>
<Name> (บุตรของ <AssignVariable>)
ระบุชื่อของตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่มีการตั้งค่าโดยนโยบาย AssignMessage) หากไม่มีตัวแปรที่ระบุชื่อใน <AssignVariable> นโยบายจะสร้างตัวแปรที่มีชื่อดังกล่าว
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ต้องระบุ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignVariable>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Name> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble< Namevariab>l<e_name/Name >/AssignVariable /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ระบุตัวแปรปลายทางเป็น myvar และตั้งค่าเป็น
ค่าตามตัวอักษร "42"
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
หากไม่มี myvar <AssignVariable> จะสร้างขึ้น
<Ref> (บุตรของ <AssignVariable>)
ระบุแหล่งที่มาของการกำหนดเป็นตัวแปรโฟลว์ ตัวแปรโฟลว์อาจเป็นตัวแปรโฟลว์ที่กำหนดไว้ล่วงหน้า (ตามที่ระบุไว้ในข้อมูลอ้างอิงตัวแปรโฟลว์) หรือตัวแปรโฟลว์ที่กำหนดเอง ที่คุณสร้างขึ้น
ระบบจะตีความค่าของ <Ref> เป็นตัวแปรโฟลว์เสมอ คุณไม่สามารถ
ระบุสตริงตามตัวอักษรเป็นค่า
ได้ หากต้องการกำหนดค่าสตริงตามตัวอักษร ให้ใช้องค์ประกอบ <Value> แทน
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignVariable>
|
| องค์ประกอบย่อย | ไม่มี |
เมื่อระบุตัวแปรโฟลว์ด้วย <Ref> ให้ละเว้นวงเล็บปีกกา "{}" ที่คุณมักจะใช้เพื่ออ้างอิงตัวแปรโฟลว์ เช่น
หากต้องการตั้งค่าตัวแปรใหม่เป็นค่าของตัวแปร client.host flow
ให้ทำดังนี้
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
หากต้องการกำหนดค่าเริ่มต้นสำหรับตัวแปรโฟลว์ปลายทาง ให้ใช้ <Value>
ร่วมกับ <Ref> หากตัวแปรโฟลว์ที่ระบุโดย
<Ref> ไม่มี อ่านไม่ได้ หรือเป็น Null Edge จะกำหนดค่า
ของ <Value> ให้กับตัวแปรโฟลว์ปลายทางแทน
องค์ประกอบ <Ref> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame< Refsource_>v<ariable/Ref >/AssignVariable /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะกำหนดค่าของตัวแปรโฟลว์ request.header.user-agent ให้กับตัวแปรโฟลว์ปลายทาง myvar และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปร Country
<AssignMessage name="assignvariab>le-<4" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-ag<ent/Ref /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>oun<try/Ref /Assi>g<nVariable /Ass>ignMessage
ในตัวอย่างนี้ Edge ไม่ได้ระบุค่าเริ่มต้น (หรือค่าสำรอง) สำหรับการกำหนดค่าทั้ง 2 รายการ
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะกำหนดค่าของตัวแปรโฟลว์ request.header.user-agent
ให้กับตัวแปรโฟลว์ปลายทาง myvar และค่า
ของพารามิเตอร์การค้นหา country ให้กับตัวแปร Country
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
ในตัวอย่างนี้ หากค่าของrequest.header.user-agentตัวแปรโฟลว์
หรือพารามิเตอร์การค้นหา Country เป็น Null อ่านไม่ได้ หรือมีรูปแบบไม่ถูกต้อง Edge จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรใหม่
ตัวอย่าง 3
กรณีการใช้งานทั่วไปสำหรับ <AssignVariable> คือการตั้งค่าเริ่มต้นของพารามิเตอร์การค้นหา ส่วนหัว หรือค่าอื่นๆ ที่ส่งไปพร้อมกับคำขอได้ ตัวอย่างเช่น คุณสร้าง
พร็อกซี API สภาพอากาศที่คำขอใช้พารามิเตอร์การค้นหาเดียวชื่อ "w" พารามิเตอร์นี้
มีรหัสของเมืองที่คุณต้องการทราบสภาพอากาศ URL ของคำขอมีรูปแบบดังนี้
http://myCO.com/v1/weather/forecastrss?w=city_ID
หากต้องการกําหนดค่าเริ่มต้นสําหรับ "w" ให้สร้างนโยบาย AssignMessage ดังต่อไปนี้
<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3" AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/ > I<gnoreUnresolve>dVari<able>strue /IgnoreUnres<olved>Varia<ble>s AssignVariable < N>amere<quest>.querypa<ram.w/>Nam<e Refreques>t<.queryparam.w/>Ref Value12797282/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>
จะใช้เทมเพลตข้อความจากแอตทริบิวต์ที่กำหนดเองของแอปได้ ซึ่งพร้อมใช้งาน
เป็นตัวแปรโฟลว์จากนโยบายความปลอดภัย
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignVariable>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Template> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e" > AssignVariabl<e Tem>platemessage<_template/Template or Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate /AssignVariable /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ใช้ไวยากรณ์การสร้างเทมเพลตข้อความเพื่อเชื่อมตัวแปรบริบท 2 ตัว กับสตริงตัวอักษร (ยัติภังค์) ระหว่างตัวแปรทั้ง 2
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะระบุตัวแปรโฟลว์ โดยค่าของตัวแปร คือเทมเพลตข้อความที่กำหนดไว้ล่วงหน้า ใช้ตัวเลือกนี้หากต้องการแทรกเทมเพลตที่กำหนดไว้ล่วงหน้าใน รันไทม์โดยไม่ต้องแก้ไขนโยบาย
<AssignMessage name='AV-via-template-indirec>tly<39; IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='my_templat>e_v<ariable'/ > </AssignVariabl>e /AssignMessage
ตัวอย่าง 3
ตัวอย่างต่อไปนี้ระบุตัวแปรโฟลว์และค่าข้อความ ในกรณีนี้ หากตัวแปรที่อ้างอิงไม่ใช่ค่าว่าง ระบบจะใช้ค่านั้นเป็นเทมเพลต หากค่าที่อ้างอิง
เป็น Null ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {system.uuid}-{messageid})
เป็นเทมเพลต รูปแบบนี้มีประโยชน์ในการระบุค่า "ลบล้าง" ในกรณีที่คุณต้องการลบล้างเทมเพลตเริ่มต้น (ส่วนข้อความ) ด้วยค่าที่ตั้งค่าแบบไดนามิก ตัวอย่างเช่น คำสั่งแบบมีเงื่อนไขอาจดึงค่า
จากแผนที่คีย์-ค่าและตั้งค่าตัวแปรที่อ้างอิงเป็นค่านั้น
<AssignMessage name='AV-template-with-fallb>ack<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template > </AssignVariabl>e /AssignMessage
<Value> (บุตรของ <AssignVariable>)
กำหนดค่าของตัวแปรโฟลว์ปลายทางที่ตั้งค่าด้วย <AssignVariable> ระบบจะตีความค่า
เป็นสตริงตามตัวอักษรเสมอ คุณไม่สามารถใช้ตัวแปรโฟลว์เป็นค่าได้ แม้ว่าจะ
ใส่ค่าไว้ในวงเล็บ ("{}") ก็ตาม หากต้องการใช้ตัวแปรโฟลว์ ให้ใช้ <Ref>
แทน
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignVariable>
|
| องค์ประกอบย่อย | ไม่มี |
เมื่อใช้ร่วมกับองค์ประกอบ <Ref> <Value>
จะทำหน้าที่เป็นค่าเริ่มต้น (หรือค่าสำรอง) หากไม่ได้ระบุ <Ref>, แก้ไขไม่ได้ หรือเป็นค่าว่าง ระบบจะใช้ค่าของ <Value>
องค์ประกอบ <Value> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < Na>mevariable_nam<e/Name> < Valuevariable>_<value/Value >/AssignVariable /AssignMessage
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่าตัวแปรโฟลว์ปลายทาง myvar
เป็นค่าตามตัวอักษร "42"
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้จะกําหนดค่าของตัวแปรโฟลว์ request.header.user-agent ให้กับตัวแปรโฟลว์ myvar และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปร Country
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
หากการกำหนดค่าใดค่าหนึ่งล้มเหลว <AssignVariable> จะกำหนดค่า "ErrorOnCopy" ให้กับ
ตัวแปรโฟลว์ปลายทางแทน
<Copy>
คัดลอกค่าจากข้อความที่ระบุโดยแอตทริบิวต์ source
ไปยังข้อความที่ระบุโดยองค์ประกอบ <AssignTo> หากคุณไม่ได้ระบุเป้าหมายด้วย <AssignTo> นโยบายนี้จะคัดลอกค่าไปยังคำขอหรือการตอบกลับ ทั้งนี้ขึ้นอยู่กับว่านโยบายนี้ดำเนินการที่ใดในโฟลว์
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย |
<FormParams><Headers><Path><Payload><QueryParams><ReasonPhrase><StatusCode><Verb><Version> |
หากคุณไม่ระบุองค์ประกอบย่อยใดๆ ใต้องค์ประกอบ <Copy> ระบบจะคัดลอกทุกส่วน
ของข้อความต้นฉบับที่กำหนด
องค์ประกอบ <Copy> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> name<="policy_name"
Co>py so<urce="[request|response]&qu<ot;
!--> Can also <be an empt>y array< (FormParams/) -->
FormP>arams
For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
...<
/Fo>rmParams
< !-- >Can als<o be an empty array (Head>ers/) --><
He>aders
Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
<...
>/Head<ers
Path[false|true]/Path
< Payload[fa>lse|true]/<Payload
> !-- Ca<n also be an empty array (QueryPa>rams/) -->
< QueryPara>ms
QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
> ...
/Q<ueryParams<>/span>
R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
Stat<usCode[f>als<e|tru>e]/<StatusCode
Verb[false|true]/Verb<
> Version[f>als<e|true]/Version
/Copy
!-- Used as the destination for the Copy values --
A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะคัดลอกส่วนหัว พารามิเตอร์แบบฟอร์ม 3 รายการ เส้นทาง และพารามิเตอร์การค้นหาทั้งหมด
จากข้อความ request ไปยังคำขอใหม่ที่กำหนดเองชื่อ newRequest
<AssignMessage name="AM-co>py-<1" AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo <Copy source="request&qu>ot; < Heade>rs < Header> name=&<quot;Header_Name_1"/ /Head>ers < FormParams FormParam name=&q>uot;For<m_Param_Name_1"/ FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/ < FormPa>ram< name>=<"Form_Par>am_Name_3"/ /FormParams Pathtrue/Path QueryParams/ /Copy /AssignMessage
เนื่องจากไม่มีองค์ประกอบอย่าง <Payload> และ <Verb>
นโยบายจึงไม่คัดลอกส่วนเหล่านั้นของข้อความ
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำทุกอย่างในresponse message ที่มีอยู่ออกก่อน จากนั้น
จะคัดลอกค่าทั้งหมดจากข้อความอื่นที่ชื่อ secondResponse ลงใน
response message
<AssignMessage name='AM-Copy-Respo>nse<' AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo !>-- <first r>emo<ve any existing values -- Remove/ !-- then copy eve>ryt<hing from the designated mess>a<ge -- Copy s>ource="secondResponse"/ /AssignMessage
องค์ประกอบ <Copy> มีแอตทริบิวต์เดียว ดังนี้
| แอตทริบิวต์ | คำอธิบาย | จำเป็นหรือไม่ | ประเภท |
|---|---|---|---|
| source |
ระบุออบเจ็กต์ต้นทางของการคัดลอก
|
ไม่บังคับ | สตริง |
<FormParams> (บุตรของ <Copy>)
คัดลอกพารามิเตอร์แบบฟอร์มจากคำขอที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังคำขอที่ระบุโดยองค์ประกอบ <AssignTo> องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ a
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> หรืออาร์เรย์ว่าง |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !--> Can also <be an empt>y array< (FormParams/) --> FormP>arams For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram ... /FormParams /Copy /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์มเดียวจากคำขอไปยัง คำขอที่กำหนดเอง "MyCustomRequest"
<AssignMessage name="copy-formpara>ms-<1" Copy source>=&quo<t;request&>quot; < FormParams FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram /FormParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์ของแบบฟอร์มทั้งหมดไปยังคำขอที่กำหนดเอง "MyCustomRequest":
<AssignMessage name="copy-formpara>ms-<2" Copy source>=&quo<t;request&q>uot<; > Fo<rmParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์ม 3 รายการไปยังคำขอที่กำหนดเอง "MyCustomRequest"
<AssignMessage name="copy-formpara>ms-<3" Copy source>=&quo<t;request&>quot; < FormParams FormPara>m name=<"paramName1"/ > FormP<aram name="paramName2&q>uot;/< Form>Par<am na>me=<"paramName3"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 4
หากมีพารามิเตอร์แบบฟอร์มหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="copy-formpara>ms-<4" Copy source>=&quo<t;request&>quot; < FormParams >FormPar<am name="f1&quo>t;/ < FormParam name=&quo>t;f2&<quot;/ > F<ormPa>ram< name="f3.2"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; 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]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; >!-- Can al<so be a>n empty< array (Headers/) --> > Headers < H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header ... /Headers /Copy /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะคัดลอกส่วนหัว user-agent จากคำขอไปยัง
ออบเจ็กต์คำขอใหม่ที่กำหนดเอง
<AssignMessage name="copy-heade>rs-<1" Copy source>=&quo<t;reque>st"<; Headers Heade>r nam<e=">use<r-age>nt&<quot;/ /Headers /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 2
หากต้องการคัดลอกส่วนหัวทั้งหมด ให้ใช้องค์ประกอบ <Headers> ที่ว่างเปล่า ดังตัวอย่างต่อไปนี้
<AssignMessage name="copy-heade>rs-<2" Copy source>=&quo<t;reques>t&q<uot;<>/span> < Headers/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 3
หากมีส่วนหัวหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="copy-heade>rs-<3" Copy source>=&quo<t;reque>st"<; Headers > Head<er name="h1&>quot;/ < Header name=&>quot;<h2">/ < >Hea<der name="h3.2"/ /Headers /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; 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]"
> na<me="policy_name"
Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
Path>[false|true]/Path
/Copy
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ระบุว่านโยบาย AssignMessage ควรคัดลอกเส้นทางจากคำขอแหล่งที่มา ไปยังออบเจ็กต์คำขอใหม่ที่กำหนดเอง
<AssignMessage name="copy-pa>th-<1" Copy source>=&quo<t;re>ques<t&quo>t; < P>ath<true/Path /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
คุณจะใช้ <Path> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Payload> (บุตรของ <Copy>)
กำหนดว่าจะคัดลอกเพย์โหลดจากแหล่งที่มาไปยังปลายทางหรือไม่ โดยต้นทางและปลายทางอาจเป็นคำขอหรือการตอบกลับก็ได้
หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลดจากข้อความที่ระบุโดย
องค์ประกอบ <Copy> ของแอตทริบิวต์ source ไปยังข้อความ
ที่ระบุโดยองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=&q>uot;[request<|respons>e]&<quot;> < Payload[fa>lse|true]/Payload /Copy /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <Payload> เป็น "จริง" เพื่อให้ระบบคัดลอกเพย์โหลดคำขอจากคำขอไปยังการตอบกลับ
<AssignMessage name="AM-copy-paylo>ad-<1" Copy source>=&quo<t;reque>st&q<uot; > Pa<yload>tru<e/Payloa>d /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
<QueryParams> (บุตรของ <Copy>)
คัดลอกพารามิเตอร์สตริงคำค้นหาจากคำขอที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ
<Copy> ไปยังคำขอที่ระบุโดยองค์ประกอบ
<AssignTo> องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <QueryParam> หรืออาร์เรย์ว่าง |
| องค์ประกอบหลัก |
<QueryParam>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !-- >Can also b<e an empty >array (<QueryParams/) --> QueryPar>ams QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram ... /QueryParams /Copy /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์การค้นหา "my_param" จากคำขอไปยังออบเจ็กต์คำขอที่กำหนดเองใหม่
<AssignMessage name="copy-querypara>ms-<1" Copy source>=&quo<t;request&q>uot; < QueryParams QueryPa>ram n<ame="my>_pa<ram&q>uot<;/ /QueryParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์การค้นหาทั้งหมดจากคำขอไปยังออบเจ็กต์คำขอใหม่ที่กำหนดเอง
<AssignMessage name="copy-querypara>ms-<2" Copy source>=&quo<t;request&qu>ot;< >Que<ryParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
ตัวอย่าง 3
หากมีพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="copy-querypara>ms-<3" Copy source>=&quo<t;request&q>uot; < QueryParams Qu>eryPara<m name="qp1">/ < QueryParam name="q>p2&qu<ot;/ Q>uer<yPara>m n<ame="qp3.2"/ /QueryParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; 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]"
> na<me="policy_name"
Co>py so<urce="[>request|resp<onse]"
> <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
/Copy
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่า <ReasonPhrase> เป็น true เมื่อมีองค์ประกอบต้นทางและ
<AssignTo> ตามที่ระบุ <Copy>
จะคัดลอกวลีเหตุผลจากข้อความตอบกลับที่มีชื่อไปยังออบเจ็กต์ response
<AssignMessage name="AM-copy-reasonphra>se-<1" Copy source="serviceC>allou<tResponse&qu>ot; < ReasonPhr>ase<true/>Rea<sonPhras>e /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภทการตอบกลับเท่านั้น
<StatusCode> (บุตรของ <Copy>)
กำหนดว่าจะคัดลอกรหัสสถานะจากคำตอบของแหล่งที่มาไปยังคำตอบของปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลกับคำขอ
หากเป็น "จริง" นโยบายนี้จะคัดลอกรหัสสถานะจากข้อความตอบกลับที่ระบุโดย
แอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความตอบกลับ
ที่ระบุโดยองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce=">;[request|re<sponse]&quo>t;
< S>t<atusCode[false>|true]/StatusCode
/Copy
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <StatusCode> เป็น "true" ซึ่งจะคัดลอกรหัสสถานะ
จากออบเจ็กต์การตอบกลับเริ่มต้นไปยังออบเจ็กต์การตอบกลับที่กำหนดเองใหม่
<AssignMessage name="copy-statusco>de-<1" Copy source=>"<;response&>quot<; Statu>sCo<detru>e/S<tatusCode /Copy AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo /AssignMessage
คุณจะใช้ <StatusCode> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภทการตอบกลับเท่านั้น
การใช้งาน <StatusCode> โดยทั่วไปคือการตั้งค่ารหัสสถานะการตอบกลับของพร็อกซีเป็นค่าอื่นที่ไม่ใช่ค่าที่ได้รับจากเป้าหมาย
<Verb> (บุตรของ <Copy>)
กำหนดว่าจะคัดลอกกริยา HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
หากเป็น "true" จะคัดลอกกริยาที่พบในแอตทริบิวต์ source ขององค์ประกอบ <Copy>
ไปยังคำขอที่ระบุในองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Verb> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
Verb>[false|true]/Verb
/Copy
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <Verb> เป็น "จริง" ซึ่งจะคัดลอกกริยาจากคำขอเริ่มต้นไปยังคำขอใหม่ที่กำหนดเอง
<AssignMessage name="copy-ve>rb-<1" Copy source>=&quo<t;re>ques<t&quo>t; < V>erb<true/Verb /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
คุณจะใช้ <Verb> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version> (บุตรของ <Copy>)
กำหนดว่าจะคัดลอกเวอร์ชัน HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
หากเป็น "จริง" จะคัดลอกเวอร์ชัน HTTP ที่พบในแอตทริบิวต์ source ขององค์ประกอบ <Copy>
ไปยังออบเจ็กต์ที่ระบุโดยองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Copy>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
< Version[fa>lse|true]/Version
/Copy
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <Version> เป็น "จริง" ในคำขอ ซึ่งจะคัดลอกเวอร์ชันจากออบเจ็กต์คำขอเริ่มต้นไปยังออบเจ็กต์คำขอที่กำหนดเองใหม่
<AssignMessage name="copy-versi>on-<1" Copy source>=&quo<t;reque>st&q<uot; > Ve<rsion>tru<e/Version /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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 แตกต่างจากการตั้งค่า <AssignMessage> ของ continueOnError เป็น true เนื่องจากเป็นการตั้งค่าและรับค่าของตัวแปรโดยเฉพาะ หากตั้งค่า continueOnError เป็น
true Edge จะไม่สนใจข้อผิดพลาดทั้งหมด ไม่ใช่แค่ข้อผิดพลาดที่พบเมื่อใช้ตัวแปร
องค์ประกอบ <IgnoreUnresolvedVariables> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name">;
IgnoreUnre<solvedVariables[true|false>]<
/IgnoreUnre>solvedVariables
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <IgnoreUnresolvedVariables> เป็น "true"
<AssignMessage name="AM-Set-Hea>der<s&q>uot; < Set > Head<ers Header name=>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er > </Headers /Set IgnoreU>nresolv<edVariablestrue /IgnoreU>n<resolvedVariab>les /AssignMessage
เนื่องจากตั้งค่า <IgnoreUnresolvedVariables> เป็น true หากไม่ได้กำหนดตัวแปร possibly-defined-variable นโยบายนี้จะไม่แสดงข้อผิดพลาด
<Remove>
นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดของข้อความออกจาก
ข้อความ ข้อความอาจเป็นคำขอหรือการตอบกลับก็ได้ คุณระบุข้อความที่ <Remove>
ดำเนินการได้โดยใช้องค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | ประเภทที่ซับซ้อน |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย |
<FormParams><Headers><Payload><QueryParams> |
กรณีการใช้งานทั่วไปสำหรับ <Remove> คือการลบพารามิเตอร์การค้นหาหรือส่วนหัวที่มีข้อมูลที่ละเอียดอ่อนออกจากออบเจ็กต์คำขอขาเข้า เพื่อหลีกเลี่ยงการส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์
องค์ประกอบ <Remove> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam ... /Form<Params > !-- Can< also b>e an em<pty array (Headers/) --&g>t; Heade<rs > Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r < ... /Headers Payload[<false|true]/>Payload < !-- Can a>lso be <an empty array (QueryParams/) --&>gt; QueryPar<ams Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam ... /QueryParams /Remove /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะนำเนื้อความของข้อความออกจากการตอบกลับ
<AssignMessage name="AM-remo>ve-<1" D>isplayNa<meremove-1/D>isp<layNam>e R<emove > P<ayloadtr>ue/<Payload> </Remove > Assign<Torespons>e</AssignTo /Ass>ignMessage
ในขั้นตอนการตอบกลับ นโยบายนี้จะนำเนื้อหาของการตอบกลับออกและส่งคืนเฉพาะส่วนหัว HTTP ไปยังไคลเอ็นต์
ตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์แบบฟอร์มและพารามิเตอร์การค้นหาทั้งหมดออกจากออบเจ็กต์ request
<AssignMessage name="AM-remo>ve-<2">;
R<emove
!<-- Empty (F>ormParams/) removes all form par>amete<rs --
F>ormPa<rams/
Q>ueryPar<ams
QueryParam n>ame=&<quot;qp1&quo>t;/<
/Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 3
ตัวอย่างต่อไปนี้จะนำทุกอย่างออกจากออบเจ็กต์ข้อความ
<AssignMessage name="AM-remo>ve-<3"> <Remove/ > Assig<nToreques>t</AssignTo /Ass>ignMessage
โดยปกติแล้ว คุณจะทำเช่นนี้ก็ต่อเมื่อจะใช้องค์ประกอบ <Set> หรือองค์ประกอบ <Copy> เพื่อกำหนดค่าแทนที่บางค่าในข้อความ
<FormParams> (บุตรของ <Remove>)
นําพารามิเตอร์แบบฟอร์มที่ระบุออกจากคําขอ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ a
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> หรืออาร์เรย์ว่าง |
| องค์ประกอบหลัก |
<Remove>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam .>.. /FormParams /Remove /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์แบบฟอร์ม 3 รายการออกจากคำขอ
<AssignMessage name="AM-remove-formpara>ms-<1">;
R<emove
>FormPar<ams
FormParam name=">;form_p<aram_1"/
FormParam >name=&q<uot;form_param_2"/
>FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/
< /FormPar>a<ms
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์แบบฟอร์มทั้งหมดออกจากคำขอ
<AssignMessage name="AM-remove-formpara>ms-<2">;
R<emove
F>orm<Params/>
</Remove
> Assig<nToreques>t</AssignTo
/Ass>ignMessageตัวอย่าง 3
หากมีพารามิเตอร์แบบฟอร์มหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-formpara>ms-<3">;
R<emove
>FormPar<ams
FormParam >name=&q<uot;f1"/
>FormPar<am name="f2">/
< FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/
< /FormPar>a<ms
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่างนี้จะนำ "f1", "f2" และค่าที่ 2 ของ "f3" ออก หาก "f3" มีค่าเพียงค่าเดียว ระบบจะไม่นำออก
คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
Content-Type: "application/x-www-form-urlencoded"
<Headers> (บุตรของ <Remove>)
นำส่วนหัว HTTP ที่ระบุออกจากคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <Header> หรืออาร์เรย์ว่าง |
| องค์ประกอบหลัก |
<Remove>
|
| องค์ประกอบย่อย |
<Header> |
องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can al>so be an e<mpty ar>ray (He<aders/) --> Header>s Head<er name>="header_n<ame">;he<ader_va>l<ue/Header > ... /Headers /Remove /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะนำส่วนหัว user-agent ออกจากคำขอ
<AssignMessage name="AM-remove-one-he>ade<r">;
R<emove
> Head<ers
Header name=&qu>ot;us<er-agent>&qu<ot;/
> /<Headers
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำส่วนหัวทั้งหมดออกจากคำขอ
<AssignMessage name="AM-remove-all-hea>der<s">; R<emove > H<eaders/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
ตัวอย่าง 3
หากมีส่วนหัวหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-heade>rs-<3">;
R<emove
> Head<ers
Header >name=&q<uot;h1"/
> Head<er name="h2&qu>ot;/
< He>ade<r name=>&qu<ot;h3.2&>quot;/
< /Head>e<rs
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่างนี้จะนำ "h1", "h2" และค่าที่ 2 ของ "h3" ออกจากคำขอ หาก "h3" มีค่าเพียงค่าเดียว ระบบจะไม่นำออก
<Payload> (บุตรของ <Remove>)
กำหนดว่า <Remove> จะลบเพย์โหลดในคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo> หรือไม่ ตั้งค่าเป็น "true" เพื่อ
ล้างเพย์โหลด หรือตั้งค่าเป็น "false" ค่าเริ่มต้นคือ "false"
| ค่าเริ่มต้น | เท็จ |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | บูลีน |
| องค์ประกอบหลัก |
<Remove>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_na>me" <Remove > <Payload>[<false|true]/Pa>yload /Remove /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่า <Payload> เป็น "true" เพื่อให้ระบบล้าง
เพย์โหลดคำขอ
<AssignMessage name="AM-remove-paylo>ad-<1">; R<emove > P<ayloadtr>ue/<Payload> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
<QueryParams> (บุตรของ <Remove>)
นําพารามิเตอร์การค้นหาที่ระบุออกจากคําขอ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ a
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <QueryParam> หรืออาร์เรย์ว่าง |
| องค์ประกอบหลัก |
<Remove>
|
| องค์ประกอบย่อย |
<QueryParam> |
องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also b>e an empty< array (Que>ryParam<s/) --> QueryParams >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param ..>. /QueryParams /Remove /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์การค้นหา 1 รายการออกจากคำขอ
<AssignMessage name="AM-remove-querypara>ms-<1">;
Rem<ove
Q>ueryParam<s
QueryParam n>ame=&qu<ot;qp1">/
< /Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 2
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์การค้นหาทั้งหมดออกจากคำขอ
<AssignMessage name="AM-remove-querypara>ms-<2">;
Rem<ove
Qu>ery<Params/>
</Remove
> Assig<nToreques>t</AssignTo
/Ass>ignMessageตัวอย่าง 3
หากมีพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้
<AssignMessage name="AM-remove-querypara>ms-<3">;
Rem<ove
Q>ueryParam<s
QueryParam n>ame="<;qp1"/
Qu>eryParam <name="qp2"/
> Q<ueryParam na>me=<"q>p3.<2"/>
</QueryPar>a<ms
/Remove
> AssignTorequest/AssignTo
/AssignMessageตัวอย่างนี้จะนำ "qp1", "qp2" และค่าที่ 2 ของ "qp3" ออกจากคำขอ หาก "qp3" มีค่าเพียงค่าเดียว ระบบจะไม่นำออก
ตัวอย่าง 4
ตัวอย่างต่อไปนี้จะนำพารามิเตอร์การค้นหา apikey ออกจากคำขอ
<AssignMessage name="AM-remove-query-p>ara<m">;
R<emove
Q>ueryPar<ams
QueryParam name>=&quo<t;apikey&quo>t;/<
/Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageคุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
<Set>
ตั้งค่าข้อมูลในข้อความคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo> <Set> เขียนทับส่วนหัวหรือ
พารามิเตอร์การค้นหาหรือแบบฟอร์มที่มีอยู่ในข้อความเดิม ส่วนหัว พารามิเตอร์การค้นหา และพารามิเตอร์แบบฟอร์ม
ในข้อความ HTTP อาจมีค่าหลายค่า หากต้องการเพิ่มค่าสำหรับส่วนหัวหรือพารามิเตอร์ ให้ใช้
องค์ประกอบ <Add> แทน
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | ประเภทที่ซับซ้อน |
| องค์ประกอบหลัก |
<AssignMessage>
|
| องค์ประกอบย่อย |
<FormParams><Headers><Payload><Path><QueryParams><ReasonPhrase><StatusCode><Verb><Version> |
องค์ประกอบ <Set> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am < ... /FormParams > Headers < Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader ... /Headers Pathpath/Path Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot; < variableSuffix="suffix&>quot;new_payload</Payload > QueryParams < QueryPa>ram n<ame="qu>eryparam_name"queryparam_<value/QueryPa>ram < ... > /QueryParams ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e < V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb Version[1.0|1.1|{variable}]/Verb /Set /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัวที่เฉพาะเจาะจง เมื่อแนบนโยบายนี้ในโฟลว์คำขอ ระบบจะอนุญาตให้ระบบต้นทางรับส่วนหัวเพิ่มเติมที่ไม่ได้รวมอยู่ใน คำขอขาเข้าเดิม
<AssignMessage name="AM-Set-He>ade<r&q>uot;
< Set
> Header<s
Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
< /Heade>rs
/S<et
Assi>g<nTorequest/Ass>ignTo
/AssignMessageตัวอย่าง 2
ตัวอย่างต่อไปนี้จะเขียนทับเพย์โหลดสำหรับการตอบกลับ รวมถึงส่วนหัว Content-Type
<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot; < Set Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load /S>e<t AssignTore>sponse/AssignTo /AssignMessage
<FormParams> (บุตรของ <Set>)
เขียนทับพารามิเตอร์แบบฟอร์มที่มีอยู่ในการขอและแทนที่ด้วยค่าใหม่ที่คุณ ระบุด้วยองค์ประกอบนี้ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | อาร์เรย์ขององค์ประกอบ <FormParam> |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย |
<FormParam> |
องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_na>me"<;
Set
FormParams
F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
.>..
/FormParams
/Set
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่าพารามิเตอร์แบบฟอร์มที่ชื่อ "myparam" เป็นค่าของตัวแปร request.header.myparam ในคำขอใหม่ที่กำหนดเอง
<AssignMessage name="AM-set-formpara>ms-<1&q>uot; < Set >FormPar<ams FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m > /<FormParams /Set AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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]"
> na<me=>"<;policy>_name&q<uot;
Set
Headers
> Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
> ...
/Headers
/Set
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัว x-ratelimit-remaining เป็นค่าของตัวแปร
ratelimit.Quota-1.available.count
<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
< Set
> Head<ers
Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
< /Heade>rs
/Se<t
Assig>n<Toresponse/Ass>ignTo
/AssignMessageหากคุณกำหนดส่วนหัวที่ว่างเปล่าในนโยบาย
(<Set><Headers/></Set>) นโยบายจะไม่ตั้งค่าส่วนหัวใดๆ ซึ่ง
จะส่งผลเช่นเดียวกับการละเว้น <Headers>
<Path> (บุตรของ <Set>)
<Payload> (บุตรของ <Set>)
กำหนดเนื้อหาข้อความสำหรับคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo> เพย์โหลดอาจเป็นประเภทเนื้อหาที่ถูกต้อง เช่น ข้อความธรรมดา
JSON หรือ XML
| ค่าเริ่มต้น | สตริงว่าง |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name" Set Payload contentType="content_type" variablePrefix=>"prefi<x"<>/span> < > <variableSuffix>="suffix"new_payload/Payload /Set /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่าเพย์โหลดข้อความธรรมดา
<AssignMessage name="set-paylo>ad-<1&q>uot; < Set Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload > /Set /AssignMessage
ตัวอย่าง 2
ตัวอย่างต่อไปนี้ตั้งค่าเพย์โหลด JSON
<AssignMessage name="set-paylo>ad-<2&q>uot; < Set Payload contentType="ap>plication/json" {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"} /Payload /Set /AssignMessage
ตัวอย่าง 3
ตัวอย่างต่อไปนี้จะแทรกค่าตัวแปรลงในเพย์โหลดโดยการครอบชื่อตัวแปร ด้วยวงเล็บปีกกา
<AssignMessage name="set-paylo>ad-<3&q>uot; < Set Payload contentType="ap>plication/json" {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"} /Payload /Set /AssignMessage
ใน Apigee เวอร์ชันก่อนหน้า คุณไม่สามารถใช้เครื่องหมายปีกกาเพื่อระบุการอ้างอิงตัวแปรภายในเพย์โหลด JSON ได้
ในรุ่นเหล่านั้น คุณ
ต้องใช้แอตทริบิวต์ variablePrefix และ variableSuffix เพื่อ
ระบุอักขระคั่น และใช้อักขระเหล่านั้นเพื่อครอบชื่อตัวแปร ดังนี้
<AssignMessage name="set-payloa>d-3<b&q>uot; < Set Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"} /Payload /Set /AssignMessage
ไวยากรณ์เก่านี้ยังคงใช้งานได้
ตัวอย่าง 4
ระบบจะถือว่าเนื้อหาของ <Payload> เป็นเทมเพลตข้อความ ซึ่งหมายความว่านโยบาย AssignMessage จะแทนที่ตัวแปรที่อยู่ในเครื่องหมายปีกกาด้วยค่าของตัวแปรที่อ้างอิงในรันไทม์
ตัวอย่างต่อไปนี้ใช้ไวยากรณ์วงเล็บปีกกาเพื่อตั้งค่าส่วนหนึ่งของเพย์โหลดเป็นค่าตัวแปร
<AssignMessage name="set-paylo>ad-<4&q>uot; < Set Payload contentType=>"t<ext/>xml"< > r<oot> <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]"
> na<me=>"<;policy_nam>e"<
Set
QueryParams
Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
..>.
/QueryParams
/Set
/AssignMessageตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่าพารามิเตอร์การค้นหา "address" เป็นค่าของตัวแปร request.header.address
<AssignMessage name="AM-set-querypara>ms<-1&>quot;< Set Q>ueryPar<ams QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram< > </QueryParams > /Set /AssignMessage
คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- คำกริยา HTTP: GET
- ประเภทข้อความ: คำขอ
หากคุณกําหนดพารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย
(<Set><QueryParams/></Set>) นโยบายจะไม่ตั้งค่าพารามิเตอร์การค้นหา
ใดๆ ซึ่งเหมือนกับการละเว้น <QueryParams>
<ReasonPhrase> (บุตรของ <Set>)
ตั้งค่าวลีเหตุผลในการตอบกลับ โดยปกติแล้วจะใช้เพื่อการแก้ไขข้อบกพร่องร่วมกับ
<StatusCode> องค์ประกอบนี้ไม่มีผลกับคำขอ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <ReasonPhrase> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name>" Set ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase /Set /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้กำหนดวลีเหตุผลอย่างง่าย
<AssignMessage name="set-reasonphra>se-<1&q>uot; < Set Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase< /Set AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/ /AssignMessage
ตัวอย่าง 2
ระบบจะถือว่าเนื้อหาของ <ReasonPhrase> เป็นเทมเพลตข้อความ ซึ่งหมายความว่า
ระบบจะแทนที่ชื่อตัวแปรที่ครอบด้วยวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิงในขณะรันไทม์
ดังตัวอย่างต่อไปนี้
<AssignMessage name="AM-set-reasonphra>se-<2&q>uot;
< Set
Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageคุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<StatusCode> (บุตรของ <Set>)
ตั้งค่ารหัสสถานะในการตอบกลับ องค์ประกอบนี้ไม่มีผลกับคำขอ
| ค่าเริ่มต้น | "200" (เมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "จริง")
|
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริงหรือ variable |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me" Set StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode /Set /AssignMessage
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ตั้งรหัสสถานะอย่างง่าย
<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
< Set
>Sta<tusCode404/>Sta<tusC>ode<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageตัวอย่างที่ 2
ระบบจะถือว่าเนื้อหาของ <StatusCode> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปรที่ครอบด้วยเครื่องหมายปีกกาจะถูกแทนที่ด้วยค่าของตัวแปรที่อ้างอิงในขณะรันไทม์ ดังตัวอย่างต่อไปนี้
<AssignMessage name="set-statusco>de-<2&q>uot;
< Set
>StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageคุณจะใช้ <StatusCode> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: การตอบกลับ
<Verb> (บุตรของ <Set>)
ตั้งค่ากริยา HTTP ในคำขอ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริงหรือ variable |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Verb> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;pol>icy_name" Set Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb /Set /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้จะตั้งค่ากริยาอย่างง่ายในคำขอ
<AssignMessage name="AM-set-ve>rb-<1&q>uot; < Se>t < Ver>bPO<ST/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
ตัวอย่าง 2
ระบบจะถือว่าเนื้อหาของ <Verb> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปร
ที่อยู่ในเครื่องหมายปีกกาจะถูกแทนที่ด้วยค่าของตัวแปรที่อ้างอิง
ในเวลาเรียกใช้
ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อป้อนคำกริยา
<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot; < Se>t Verb{my<_vari>abl<e}/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
คุณจะใช้ <Verb> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
<Version> (บุตรของ <Set>)
ตั้งค่าเวอร์ชัน HTTP ในคำขอ องค์ประกอบนี้จะไม่มีผลต่อคำตอบ
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริงหรือ variable |
| องค์ประกอบหลัก |
<Set>
|
| องค์ประกอบย่อย | ไม่มี |
องค์ประกอบ <Version> ใช้ไวยากรณ์ต่อไปนี้
ไวยากรณ์
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name" Set < Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb /Set /AssignMessage
ตัวอย่าง 1
ตัวอย่างต่อไปนี้ตั้งค่าหมายเลขเวอร์ชันเป็น "1.1"
<AssignMessage name="AM-set-versi>on-<1&q>uot; < Set > <Version1>.1/<Vers>io<n /Set /Ass>ignMessage
ตัวอย่างที่ 2
ต่อไปนี้ใช้ตัวแปรในวงเล็บปีกกาเพื่อตั้งหมายเลขเวอร์ชัน
<AssignMessage name="AM-set-versi>on-<2&q>uot;
< Set
> Version{m<y_versio>n}/<Vers>ion<
/Set
> Assig<nToreques>t</AssignTo
/Ass>ignMessageระบบจะถือว่าเนื้อหาของ <Version> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าชื่อตัวแปรที่อยู่ในเครื่องหมายปีกกาจะถูกแทนที่ด้วยค่าของตัวแปรที่อ้างอิงในขณะรันไทม์
คุณจะใช้ <Version> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น
- ประเภทข้อความ: คำขอ
สร้างข้อความคำขอที่กำหนดเอง
คุณสามารถใช้นโยบาย AssignMessage เพื่อสร้างข้อความคำขอที่กำหนดเองได้ หลังจากสร้างคำขอที่กำหนดเองแล้ว คุณจะใช้คำขอดังกล่าวได้ในลักษณะต่อไปนี้
- เข้าถึงตัวแปรในนโยบายอื่นๆ
- ส่งไปยังบริการภายนอก
หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo> ในนโยบาย AssignMessage
policy ตั้งค่า createNew เป็น "true" และระบุชื่อของข้อความใหม่ในเนื้อหา
ขององค์ประกอบ ดังตัวอย่างต่อไปนี้
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
โดยค่าเริ่มต้น Edge จะไม่ดำเนินการใดๆ กับข้อความคำขอที่กำหนดเอง หลังจากสร้างแล้ว Edge จะ ดำเนินการตามขั้นตอนด้วยคำขอเดิม หากต้องการใช้คำขอที่กำหนดเอง ให้เพิ่มนโยบาย เช่น นโยบาย ServiceCallout ลงในพร็อกซีที่ส่งคำขอที่กำหนดเองไปยังบริการภายนอกได้
ตัวอย่างต่อไปนี้สร้างข้อความคำขอที่กำหนดเอง
ตัวอย่าง 1
ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอที่กำหนดเองด้วย Assign Message
<AssignMessage name="AssignMessa>ge-<3" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo Copy Headers > <Header n>ame<=&quo>t;u<ser>-agen<t"/ > /Head<ers /Copy Set Que>ryParams QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam /QueryParams > VerbG<ET/Verb /Set IgnoreUnr>e<solvedVariable>sfalse /IgnoreUnresolvedVariables /AssignMessage
ตัวอย่างนี้
- สร้างออบเจ็กต์ข้อความคำขอใหม่ชื่อ "MyCustomRequest"
- ใน MyCustomRequest นโยบายนี้จะทำสิ่งต่อไปนี้
- คัดลอกค่าของส่วนหัว HTTP
user-agentจากคำขอขาเข้า ไปยังข้อความใหม่ เนื่องจาก<Copy>ใช้การอ้างอิงแบบสัมบูรณ์ไปยังตัวแปรโฟลว์user-agentจึงไม่จำเป็นต้องระบุแอตทริบิวต์sourceให้กับ<Copy> - ตั้งค่าพารามิเตอร์การค้นหา
addressในข้อความที่กำหนดเองเป็นค่าของ พารามิเตอร์การค้นหาaddyของคำขอขาเข้า - ตั้งค่ากริยา HTTP เป็น
GET
- คัดลอกค่าของส่วนหัว HTTP
- ตั้งค่า
<IgnoreUnresolvedVariables>เป็น "false" เมื่อ<IgnoreUnresolvedVariables>เป็น "เท็จ" หากตัวแปรใดตัวแปรหนึ่งที่นโยบายพยายามเพิ่มไม่มีอยู่ Edge จะหยุด การประมวลผลในโฟลว์ API
ตัวอย่างที่ 2
ต่อไปนี้เป็นอีกตัวอย่างที่แสดงวิธีสร้างออบเจ็กต์คำขอที่กำหนดเองด้วย Assign Message
<AssignMessage name="AssignMessa>ge-<2" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o Set VerbPOST/Verb >Payload< conten><tType=&qu>ot;<text/xml&q><uot; > re<questope>rat<ion1>0<5/operation/re>quest /Payload /Set /AssignMessage
ตัวอย่างนี้สร้างคำขอที่กำหนดเองใหม่ชื่อ "partner.request" จากนั้นจะตั้งค่า
<Verb> และ <Payload> ในคำขอใหม่
คุณเข้าถึงข้อความคำขอที่กำหนดเองได้ในนโยบาย AssignMessage อื่นที่เกิดขึ้นในภายหลังใน
โฟลว์ ตัวอย่างต่อไปนี้จะรับค่าของส่วนหัว user-agent ของข้อความคำขอที่กำหนดเอง
<AssignMessage name="custom-request-1-ac>ces<s"
D>isplayNamecustom-reques<t-1-access/D>isp<layName
> AssignTopartn<er.reques>t/A<ssi>gnTo
< Set
> Head<ers
Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader>
< /Headers
> /Set
/AssignMessageวิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย AssignMessage ได้ในวิดีโอต่อไปนี้
| วิดีโอ | คำอธิบาย |
|---|---|
| เหตุใดจึงต้องกำหนดนโยบายข้อความ | ดูประโยชน์ของการใช้นโยบาย AssignMessage เพื่อแก้ไขคำขอ API หรือ การตอบกลับโดยไม่ต้องแก้ไขโค้ดแบ็กเอนด์ |
| คัดลอกองค์ประกอบ API โดยใช้นโยบาย AssignMessage | คัดลอกองค์ประกอบจากคำขอหรือการตอบกลับของ API แล้วสร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ โดยใช้นโยบาย AssignMessage |
| นำองค์ประกอบ API ออกโดยใช้นโยบาย AssignMessage | นำองค์ประกอบ API ออกและแก้ไข API ก่อนที่จะไปถึงแบ็กเอนด์เป้าหมายโดยใช้นโยบาย AssignMessage |
| เพิ่มและตั้งค่า API โดยใช้นโยบาย AssignMessage | เปลี่ยนคำขอหรือการตอบกลับ API โดยการเพิ่มพารามิเตอร์การค้นหา ส่วนหัว พารามิเตอร์แบบฟอร์ม หรือ เพย์โหลดโดยใช้นโยบาย AssignMessage |
| สร้างตัวแปรที่กำหนดเอง โดยใช้นโยบาย AssignMessage | ตั้งค่าตัวแปรโฟลว์ที่กำหนดเองโดยใช้นโยบาย AssignMessage และใช้ประโยชน์จากตัวแปรใน นโยบายอื่นๆ ในพร็อกซี API |
| สร้างออบเจ็กต์คำขอหรือการตอบกลับใหม่ โดยใช้นโยบาย AssignMessage | สร้างออบเจ็กต์คำขอหรือการตอบกลับ API ใหม่โดยใช้นโยบาย AssignMessage ที่รันไทม์ของ API |
| สร้าง API จำลอง โดยใช้นโยบาย AssignMessage | สร้าง REST API จำลองอย่างง่ายโดยเพิ่มนโยบาย AssignMessage ในโฟลว์การตอบกลับ |
| ตั้งค่าหรือแก้ไข เพย์โหลดโดยใช้นโยบาย AssignMessage | แปลงคำขอ REST เป็นคำขอ SOAP โดยการตั้งค่าเพย์โหลด SOAP โดยใช้นโยบาย AssignMessage ที่รันไทม์ของ API |
รหัสข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
| รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
|---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | นโยบายไม่สามารถตั้งค่าตัวแปร ดูสตริงข้อผิดพลาดสำหรับชื่อของไฟล์ ตัวแปรที่ยังไม่ได้แก้ไข | |
steps.assignmessage.VariableOfNonMsgType |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากแอตทริบิวต์ ตัวแปรประเภทข้อความแสดงคำขอ HTTP และการตอบกลับทั้งหมด Edge ในตัว
ตัวแปรโฟลว์ |
build |
steps.assignmessage.UnresolvedVariable |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรที่ระบุในนโยบาย "มอบหมายข้อความ" มีลักษณะดังนี้
|
build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
| ชื่อข้อผิดพลาด | สาเหตุ | แก้ไข |
|---|---|---|
InvalidIndex |
หากดัชนีที่ระบุในองค์ประกอบ <Copy> และ/หรือ <Remove> ของข้อความมอบหมาย
นโยบายเป็น 0 หรือเป็นจำนวนลบ การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว
|
build |
InvalidVariableName |
หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable>
การทำให้พร็อกซี API ใช้งานได้ล้มเหลวเนื่องจากไม่มีชื่อตัวแปรที่ถูกต้องสำหรับ
ที่จะกำหนดค่า ต้องระบุชื่อตัวแปรที่ถูกต้อง
|
build |
InvalidPayload |
เพย์โหลดที่ระบุในนโยบายไม่ถูกต้อง |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาดขณะรันไทม์ สำหรับข้อมูลเพิ่มเติม ดูสิ่งที่คุณ ที่ต้องทราบเกี่ยวกับข้อผิดพลาดด้านนโยบาย
| ตัวแปร | สถานที่ | ตัวอย่าง |
|---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด | assignmessage.AM-SetResponse.failed = true |
ตัวอย่างการตอบสนองข้อผิดพลาด
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
ตัวอย่างกฎข้อผิดพลาด
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
สคีมา
นโยบายแต่ละประเภทกำหนดโดยสคีมา XML (.xsd) โดยคุณดูสคีมานโยบาย
ได้ใน GitHub
หัวข้อที่เกี่ยวข้อง
ตัวอย่างการทำงาน ของนโยบาย AssignMessage มีอยู่ในตัวอย่างแพลตฟอร์ม API
ดูตัวอย่างขั้นสูงเพิ่มเติมเกี่ยวกับวิธีลบล้าง target.url จาก
ProxyEndpoint ได้ที่บทความนี้ในชุมชน Apigee
หากต้องการดู "set path" ในการทำงานในนโยบาย ServiceCallout โปรดดูตัวอย่างการเรียนรู้จากการปฏิบัตินี้ในตัวอย่าง Apigee GitHub เพียงโคลนที่เก็บและ ทำตามวิธีการในหัวข้อนั้น ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบาย Service Callout เพื่อส่งคำขอไปยังบริการภายนอก