आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
![]()
क्या
AssignMessage नीति, एपीआई प्रॉक्सी फ़्लो के दौरान नए अनुरोध और जवाब वाले मैसेज बनाती है या उनमें बदलाव करती है. इस नीति के तहत, आपको इन मैसेज पर ये कार्रवाइयां करने की अनुमति मिलती है:
- किसी मैसेज में नए फ़ॉर्म पैरामीटर, हेडर या क्वेरी पैरामीटर जोड़ना
- एक मैसेज से दूसरी मैसेज में मौजूदा प्रॉपर्टी कॉपी करना
- किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज के पेलोड हटाएं
- किसी मैसेज में मौजूद प्रॉपर्टी की वैल्यू सेट करना
AssignMessage नीति की मदद से, आम तौर पर अनुरोध या जवाब की प्रॉपर्टी जोड़ी, बदली या हटाई जाती हैं. हालांकि, AssignMessage नीति का इस्तेमाल करके, कस्टम अनुरोध या जवाब का मैसेज बनाया जा सकता है. साथ ही, इसे किसी दूसरे टारगेट को भेजा जा सकता है. इसके बारे में कस्टम अनुरोध के मैसेज बनाना लेख में बताया गया है.
AssignMessage नीति, मैसेज या फ़्लो वैरिएबल बना सकती है या उनमें बदलाव कर सकती है. इस नीति का इस्तेमाल, अनुरोध के मैसेज में बदलाव करने के लिए किया जाता है. इसके बाद, इन मैसेज को प्रॉक्सी के ज़रिए अपस्ट्रीम सिस्टम को भेजा जाता है. इसके अलावा, इस नीति का इस्तेमाल, जवाब के मैसेज में बदलाव करने के लिए भी किया जाता है. इसके बाद, इन मैसेज को एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन को भेजा जाता है.
<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
डिफ़ॉल्ट नीति
यहां दिए गए उदाहरण में, Edge के यूज़र इंटरफ़ेस (यूआई) में अपने फ़्लो में AssignMessage नीति जोड़ने पर, डिफ़ॉल्ट सेटिंग दिखाई गई हैं:
<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
Edge के यूज़र इंटरफ़ेस (यूआई) में नई AssignMessage नीति डालने पर, टेंप्लेट में सभी संभावित कार्रवाइयों के लिए स्टब शामिल होते हैं. आम तौर पर, आपको यह चुनना होता है कि इस नीति के साथ कौनसी कार्रवाइयां करनी हैं. साथ ही, आपको बाकी चाइल्ड एलिमेंट हटाने होते हैं. उदाहरण के लिए, अगर आपको कॉपी करने की कार्रवाई करनी है, तो <Copy> एलिमेंट का इस्तेमाल करें. साथ ही, नीति को ज़्यादा आसानी से पढ़ने लायक बनाने के लिए, <Add>, <Remove>, और अन्य चाइल्ड एलिमेंट हटाएं.
इस एलिमेंट में ये एट्रिब्यूट शामिल होते हैं, जो सभी नीतियों में शामिल हैं:
| एट्रिब्यूट | डिफ़ॉल्ट | ज़रूरी है? | ब्यौरा |
|---|---|---|---|
name |
लागू नहीं | ज़रूरी |
नीति का अंदरूनी नाम. इसके अलावा, मैनेजमेंट एलिमेंट के यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, नीति एलिमेंट को किसी अलग नाम से इस्तेमाल करने के लिए, |
continueOnError |
गलत | ज़रूरी नहीं | नीति के काम न करने पर गड़बड़ी दिखाने के लिए, "गलत" पर सेट करें. ज़्यादातर नीतियों के लिए इस तरीके का इस्तेमाल किया जाना चाहिए. नीति लागू न होने के बाद भी फ़्लो चलाने के लिए, "सही" पर सेट करें. |
enabled |
सही | ज़रूरी नहीं | नीति लागू करने के लिए, "सही" पर सेट करें. नीति को "बंद" करने के लिए "गलत" पर सेट करें. अगर नीति किसी फ़्लो से जुड़ी हुई हो, तो भी उसे लागू नहीं किया जाएगा. |
async |
गलत | बहिष्कृत | इस एट्रिब्यूट के इस्तेमाल पर रोक लगा दी गई है. |
यहां दी गई टेबल में, <AssignMessage> के चाइल्ड एलिमेंट के बारे में खास जानकारी दी गई है:
| चाइल्ड एलिमेंट | ज़रूरी है? | ब्यौरा |
|---|---|---|
| सामान्य कार्रवाइयां | ||
<Add> |
वैकल्पिक | यह को मैसेज ऑब्जेक्ट में जानकारी जोड़ता है. यह ऑब्जेक्ट, <AssignTo> एलिमेंट से तय होता है.
|
<Copy> |
वैकल्पिक | यह source एट्रिब्यूट से तय किए गए मैसेज से, <AssignTo> एलिमेंट से तय किए गए मैसेज ऑब्जेक्ट तक जानकारी कॉपी करता है. |
<Remove> |
वैकल्पिक | यह फ़ंक्शन, <AssignTo> एलिमेंट में दिए गए मैसेज वैरिएबल से, तय किए गए एलिमेंट मिटाता है. |
<Set> |
वैकल्पिक | यह अनुरोध या जवाब में मौजूद प्रॉपर्टी की वैल्यू बदलता है. यह वैल्यू, <AssignTo> एलिमेंट से तय की जाती है.
|
| अन्य चाइल्ड एलिमेंट | ||
<AssignTo> |
वैकल्पिक | यह तय करता है कि AssignMessage नीति किस मैसेज पर लागू होगी. यह स्टैंडर्ड अनुरोध या जवाब हो सकता है. इसके अलावा, यह कोई नया, कस्टम मैसेज भी हो सकता है. |
<AssignVariable> |
वैकल्पिक | यह फ़्लो वैरिएबल को वैल्यू असाइन करता है. अगर वैरिएबल मौजूद नहीं है, तो <AssignVariable> उसे बनाता है. |
<IgnoreUnresolvedVariables> |
वैकल्पिक | यह कुकी तय करती है कि जब किसी ऐसे वैरिएबल का सामना होता है जिसे हल नहीं किया जा सकता, तो प्रोसेसिंग बंद हो जाएगी या नहीं. |
इनमें से हर चाइल्ड एलिमेंट के बारे में, यहां दिए गए सेक्शन में बताया गया है.
उदाहरण
यहां कुछ उदाहरण दिए गए हैं, जिनसे पता चलता है कि AssignMessage नीति का इस्तेमाल कैसे किया जा सकता है:
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इस उदाहरण से नया मैसेज नहीं बनता. इसके बजाय, यह एचटीटीपी हेडर जोड़कर, मौजूदा रिस्पॉन्स मैसेज में बदलाव करता है.
इस उदाहरण में, <AssignTo> एलिमेंट में वैरिएबल का नाम response के तौर पर तय किया गया है. इसलिए, यह नीति उस रिस्पॉन्स ऑब्जेक्ट में बदलाव करती है जिसे टारगेट सर्वर से मिले डेटा के साथ सेट किया गया था.
इस नीति के तहत, रिस्पॉन्स मैसेज में जोड़ा गया एचटीटीपी हेडर, LookupCache नीति से मिले वैरिएबल से लिया गया है. इसलिए, Assign Message नीति से बदले गए जवाब के मैसेज में एक एचटीटीपी हेडर होता है. इससे पता चलता है कि नतीजे, कैश मेमोरी से लिए गए हैं या नहीं. रिस्पॉन्स में हेडर सेट करने से, डीबग करने और समस्याओं को हल करने में मदद मिल सकती है.
4: डाइनैमिक कॉन्टेंट सेट करना
Assign Message का इस्तेमाल, रिस्पॉन्स और अनुरोध के मैसेज के पेलोड में डाइनैमिक कॉन्टेंट एम्बेड करने के लिए किया जा सकता है.
किसी एक्सएमएल पेलोड में Edge फ़्लो वैरिएबल एम्बेड करने के लिए, वैरिएबल को कर्ली ब्रैकेट में डालें. जैसे: {prefix.name}.
यहां दिए गए उदाहरण में, user-agent एचटीटीपी हेडर फ़्लो वैरिएबल की वैल्यू को 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 के बाद से, वैरिएबल डालने के लिए कर्ली ब्रेसिज़ का भी इस्तेमाल किया जा सकता है.
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उपयोगकर्ता की पुष्टि करने के लिए, VerifyAPIKey नीति का इस्तेमाल करते समय, अनुरोध के मैसेज से apikey क्वेरी पैरामीटर हटाना सबसे सही तरीका है. ऐसा इसलिए किया जाता है, ताकि संवेदनशील जानकारी को बैकएंड टारगेट तक पहुंचने से रोका जा सके.
6: वैरिएबल सेट/पाना
इस उदाहरण में, Assign Message की तीन नीतियों का इस्तेमाल किया गया है:
- यह अनुरोध में तीन फ़्लो वैरिएबल बनाता है. इनकी वैल्यू स्टैटिक होती हैं
- यह अनुरोध फ़्लो में दूसरी नीति में फ़्लो वैरिएबल को डाइनैमिक तरीके से पाता है
- यह कुकी, उन्हें जवाब के पेलोड में सेट करती है
<!-- 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> एलिमेंट, अनुरोध में तीन वैरिएबल बनाता है और उन्हें सेट करता है. हर <Name> एलिमेंट, वैरिएबल का नाम तय करता है. वहीं, <Value> वैल्यू तय करता है.
दूसरी नीति, वैल्यू को पढ़ने के लिए <AssignVariable> एलिमेंट का इस्तेमाल करती है. साथ ही, तीन नए वैरिएबल बनाती है:
<!-- 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
दूसरी नीति में, <Ref> एलिमेंट, सोर्स वैरिएबल का रेफ़रंस देता है. साथ ही, <Name> एलिमेंट, नए वैरिएबल के नाम तय करते हैं. अगर <Ref> एलिमेंट से रेफ़र किया गया वैरिएबल ऐक्सेस नहीं किया जा सकता, तो <Value> एलिमेंट से तय की गई वैल्यू का इस्तेमाल किया जा सकता है.
नीतियों के इस सेट को आज़माने के लिए:
- अनुरोध फ़्लो में नीतियां #1 और #2 जोड़ें. पक्का करें कि आपने नीति #1 को नीति #2 से पहले रखा हो.
- जवाब के फ़्लो में तीसरी नीति जोड़ें.
- तीसरी नीति, जवाब में वैरिएबल जोड़ने के लिए
<Set>एलिमेंट का इस्तेमाल करती है. यहां दिए गए उदाहरण में, रिस्पॉन्स में एक एक्सएमएल पेलोड बनाया गया है. यह पेलोड, 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>में फ़्लो वैरिएबल को ऐक्सेस करने का सिंटैक्स, उन्हें कर्ली ब्रैकेट में रैप करना है.<Payload>एलिमेंट केcontentTypeएट्रिब्यूट को "application/xml" पर सेट करना न भूलें. - अपनी एपीआई प्रॉक्सी को अनुरोध भेजें. उदाहरण के लिए:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
इसके अलावा, नतीजों को
xmllintजैसे किसी यूटिलिटी के ज़रिए पाइप किया जा सकता है, ताकि एक्सएमएल को अच्छी तरह से फ़ॉर्मैट किए गए स्ट्रक्चर में दिखाया जा सके: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 नीति है. साथ ही, कॉलआउट रिस्पॉन्स में एक ही नाम वाले कई हेडर (Set-Cookie) शामिल हैं. मान लें कि Service Callout के रिस्पॉन्स वैरिएबल की डिफ़ॉल्ट वैल्यू calloutResponse है. ऐसे में, यह नीति दूसरे Set-Cookie हेडर की वैल्यू को हासिल करती है.
<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}इस रेफ़रंस में मौजूद हर चाइल्ड एलिमेंट के लिए, ज़्यादा उदाहरण दिए गए हैं. ज़्यादा उदाहरणों के लिए, GitHub पर AssignMessage का उदाहरण देखें.
चाइल्ड एलिमेंट का रेफ़रंस
इस सेक्शन में, <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पहला उदाहरण
यहां दिए गए उदाहरण में, <FormParams> एलिमेंट का इस्तेमाल किया गया है. इससे शुरुआती अनुरोध से तीन क्वेरी स्ट्रिंग पैरामीटर की वैल्यू मिलती हैं. साथ ही, टारगेट एंडपॉइंट के अनुरोध पर उन्हें फ़ॉर्म पैरामीटर के तौर पर सेट किया जाता है:
<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दूसरा उदाहरण
इस उदाहरण में, <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, बदले गए अनुरोध को टारगेट एंडपॉइंट पर भेजेगा.
फ़्लो देखने के लिए, ट्रेस टूल का इस्तेमाल किया जा सकता है. आपको दिखेगा कि अनुरोध के मुख्य हिस्से में, यूआरएल-कोड में बदला गया फ़ॉर्म डेटा शामिल है. इसे मूल रूप से क्वेरी स्ट्रिंग पैरामीटर के तौर पर पास किया गया था:
username=nick&zip_code=90210&default_language=en
<FormParams> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: अनुरोध
- इनमें से कोई एक या दोनों:
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
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पहला उदाहरण
इस उदाहरण में, अनुरोध के मैसेज में 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> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
इसके अलावा, क्वेरी पैरामीटर सिर्फ़ तब सेट किए जा सकते हैं, जब <AssignTo> एलिमेंट का type एट्रिब्यूट, अनुरोध वाला मैसेज हो. जवाब में इन्हें सेट करने से कोई असर नहीं पड़ता.
अगर आपने अपनी नीति में क्वेरी पैरामीटर का खाली कलेक्शन (<Add><QueryParams/></Add>) तय किया है, तो नीति कोई क्वेरी पैरामीटर नहीं जोड़ेगी. इसका मतलब है कि <QueryParams> को शामिल नहीं किया गया है.
<AssignTo>
इस कुकी से यह तय होता है कि AssignMessage नीति किस ऑब्जेक्ट पर काम करती है. इसके विकल्प हैं:
- अनुरोध का मैसेज: एपीआई प्रॉक्सी को मिला
request - जवाब का मैसेज: टारगेट सर्वर से मिला
response - कस्टम मैसेज: कस्टम अनुरोध या जवाब ऑब्जेक्ट
ध्यान दें कि कुछ मामलों में, उस ऑब्जेक्ट को नहीं बदला जा सकता जिस पर AssignMessage नीति लागू होती है.
उदाहरण के लिए, जवाब में क्वेरी पैरामीटर (<QueryParams>) या फ़ॉर्म पैरामीटर (<FormParams>) जोड़ने या बदलने के लिए, <Add> या <Set> का इस्तेमाल नहीं किया जा सकता. अनुरोध पर, सिर्फ़ क्वेरी पैरामीटर और फ़ॉर्म पैरामीटर में बदलाव किया जा सकता है.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | स्ट्रिंग |
| पैरंट एलिमेंट |
<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
दूसरा उदाहरण
नीचे दिए गए उदाहरण में, एक नया अनुरोध ऑब्जेक्ट बनाया गया है:
<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 |
इससे यह तय होता है कि वैल्यू असाइन करते समय, यह नीति नया मैसेज बनाती है या नहीं. अगर वैल्यू "true" है, तो नीति अगर "false" है, तो नीति इनमें से किसी एक तरीके से जवाब देती है:
अगर
|
वैकल्पिक | बूलियन |
transport |
अनुरोध या जवाब के मैसेज टाइप के लिए, ट्रांसपोर्ट का टाइप तय करता है. डिफ़ॉल्ट वैल्यू "http" होती है. यह एकमात्र ऐसी वैल्यू है जिसका इस्तेमाल किया जा सकता है. |
वैकल्पिक | स्ट्रिंग |
type |
createNew "true" होने पर, यह नए मैसेज का टाइप तय करता है. मान्य
वैल्यू "request" या "response" हैं.
इस एट्रिब्यूट को शामिल न करने पर, Edge एक अनुरोध या जवाब बनाता है. यह इस बात पर निर्भर करता है कि यह नीति फ़्लो में कहां लागू होती है. |
वैकल्पिक | स्ट्रिंग |
<AssignVariable>
यह फ़्लो वैरिएबल को वैल्यू असाइन करता है. अगर फ़्लो वैरिएबल मौजूद नहीं है, तो
<AssignVariable> इसे बनाता है.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | कॉम्प्लेक्स टाइप |
| पैरंट एलिमेंट |
<AssignMessage>
|
| चाइल्ड एलिमेंट |
<Name> (ज़रूरी है)<Ref><Template><Value> |
फ़्लो वैरिएबल को असाइन की गई वैल्यू इनमें से कोई एक हो सकती है:
- लिटरल स्ट्रिंग: फ़्लो वैरिएबल के लिए लिटरल स्ट्रिंग वैल्यू तय करने के लिए,
<Value>चाइल्ड एलिमेंट का इस्तेमाल करें. - फ़्लो वैरिएबल: डेस्टिनेशन फ़्लो वैरिएबल के लिए, मौजूदा फ़्लो वैरिएबल की वैल्यू तय करने के लिए,
<Ref>चाइल्ड एलिमेंट का इस्तेमाल करें. सोर्स के तौर पर इस्तेमाल किए जा सकने वाले फ़्लो वैरिएबल की पूरी सूची देखने के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. - मैसेज टेंप्लेट:
<Template>चाइल्ड एलिमेंट का इस्तेमाल करके, इंटरपोलेट करने के लिए मैसेज टेंप्लेट तय करें. इससे डेस्टिनेशन फ़्लो वैरिएबल में रखने के लिए वैल्यू मिलती है.
<AssignVariable> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > 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>
चाइल्ड एलिमेंट का इस्तेमाल किया गया है. इससे दो कॉन्टेक्स्ट वैरिएबल को
एक लिटरल स्ट्रिंग (हाइफ़न) के साथ जोड़ा गया है:
<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
पहला उदाहरण
यहां दिए गए उदाहरण में, डेस्टिनेशन वैरिएबल को 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 फ़्लो वैरिएबल की वैल्यू पर सेट करने के लिए:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
डेस्टिनेशन फ़्लो वैरिएबल के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, <Value> का इस्तेमाल <Ref> के साथ करें. अगर <Ref> से तय किया गया फ़्लो वैरिएबल मौजूद नहीं है, उसे पढ़ा नहीं जा सकता या वह शून्य है, तो Edge, डेस्टिनेशन फ़्लो वैरिएबल को <Value> की वैल्यू असाइन करता है.
<Ref> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > 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
यहां दिए गए उदाहरण में, फ़्लो वैरिएबल 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 क्वेरी पैरामीटर की वैल्यू शून्य है, पढ़ी नहीं जा सकती या गलत तरीके से बनाई गई है, तो Edge नए वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.
उदाहरण 3
<AssignVariable> का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर, हेडर या अनुरोध के साथ पास की जा सकने वाली किसी अन्य वैल्यू की डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है. उदाहरण के लिए, आपने मौसम की जानकारी देने वाली एपीआई प्रॉक्सी बनाई है. इसमें अनुरोध, "w" नाम का एक क्वेरी पैरामीटर लेता है. इस पैरामीटर में उस शहर का आईडी होता है जिसके लिए आपको मौसम की जानकारी चाहिए. अनुरोध किए गए यूआरएल का फ़ॉर्मैट यह है:
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> एलिमेंट की डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है. इसलिए, इस एपीआई प्रॉक्सी से ऐसा अनुरोध किया जा सकता है जिसमें "w" क्वेरी पैरामीटर शामिल न हो:
http://myCO.com/v1/weather/forecastrss
...और एपीआई प्रॉक्सी से अब भी मान्य नतीजा मिल रहा हो.
<Value> का इस्तेमाल करते समय, <Ref> की वैल्यू को फ़्लो वैरिएबल होना चाहिए. जैसे, request, response या target ऑब्जेक्ट की प्रॉपर्टी. वैल्यू, आपके बनाए गए कस्टम फ़्लो वैरिएबल की वैल्यू भी हो सकती है.
अगर आपने ऐसा फ़्लो वैरिएबल तय किया है जो <Ref> की वैल्यू के लिए मौजूद नहीं है और <IgnoreUnresolvedVariables> की वैल्यू "true" है, तो Edge एक गड़बड़ी दिखाता है.
<Template> (<AssignVariable> का बच्चा)
यह मैसेज टेंप्लेट के बारे में बताता है. मैसेज टेंप्लेट की मदद से, नीति लागू होने पर वैरिएबल स्ट्रिंग को बदला जा सकता है. साथ ही, लिटरल स्ट्रिंग को घुंघराले ब्रैकेट में रैप किए गए वैरिएबल नामों के साथ जोड़ा जा सकता है. इसके अलावा, मैसेज टेंप्लेट में फ़ंक्शन इस्तेमाल किए जा सकते हैं. जैसे, एस्केपिंग और केस कन्वर्ज़न.
ref एट्रिब्यूट का इस्तेमाल करके, फ़्लो वैरिएबल तय करें. इस वैरिएबल की वैल्यू, मैसेज टेंप्लेट होती है. उदाहरण के लिए, किसी मैसेज टेंप्लेट को डेवलपर ऐप्लिकेशन के कस्टम एट्रिब्यूट के तौर पर सेव किया जा सकता है. जब Edge, एपीआई कुंजी या सुरक्षा टोकन की पुष्टि करने के बाद डेवलपर ऐप्लिकेशन की पहचान करता है, तो <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
इस उदाहरण में, मैसेज टेंप्लेटिंग सिंटैक्स का इस्तेमाल करके, दो कॉन्टेक्स्ट वैरिएबल को एक साथ जोड़ा गया है. इनके बीच में एक लिटरल स्ट्रिंग (हाइफ़न) है:
<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
दूसरा उदाहरण
यहां दिए गए उदाहरण में, फ़्लो वैरिएबल के बारे में बताया गया है. इसमें वैरिएबल की वैल्यू, पहले से तय किया गया मैसेज टेंप्लेट है. अगर आपको नीति में बदलाव किए बिना, रनटाइम पर पहले से तय किया गया टेंप्लेट इंजेक्ट करना है, तो इस विकल्प का इस्तेमाल करें:
<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
इस उदाहरण में, फ़्लो वैरिएबल और टेक्स्ट वैल्यू के बारे में बताया गया है. इस मामले में, अगर रेफ़र किया गया वैरिएबल शून्य नहीं है, तो उस वैल्यू का इस्तेमाल टेंप्लेट के तौर पर किया जाता है. अगर रेफ़र की गई वैल्यू शून्य है, तो टेक्स्ट वैल्यू (इस मामले में, {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
यहां दिए गए उदाहरण में, 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 मैसेज में मौजूद सभी आइटम हटाए जाते हैं. इसके बाद, secondResponse नाम के किसी दूसरे मैसेज से सभी वैल्यू कॉपी करके, response मैसेज में डाली जाती हैं:
<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> एलिमेंट में सिर्फ़ एक एट्रिब्यूट होता है:
| एट्रिब्यूट | ब्यौरा | ज़रूरी है? | टाइप |
|---|---|---|---|
| सोर्स |
इससे कॉपी किए गए ऑब्जेक्ट के सोर्स के बारे में पता चलता है.
|
वैकल्पिक | स्ट्रिंग |
<FormParams> (<Copy> का बच्चा)
यह <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध से, फ़ॉर्म पैरामीटर की कॉपी बनाता है. ऐसा इसलिए किया जाता है, ताकि <AssignTo> एलिमेंट से तय किए गए अनुरोध में उनका इस्तेमाल किया जा सके. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | <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
दूसरा उदाहरण
यहां दिए गए उदाहरण में, फ़ॉर्म के सभी पैरामीटर को कस्टम अनुरोध "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
यहां दिए गए उदाहरण में, तीन फ़ॉर्म पैरामीटर को कस्टम अनुरोध "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", और "f3" की दूसरी वैल्यू कॉपी की गई है. अगर "f3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<FormParams> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: जवाब
- इनमें से कोई एक या दोनों:
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
curlके साथ, अपने अनुरोध में-d ""जोड़ें. Content-Lengthहेडर: अगर ओरिजनल अनुरोध में कोई डेटा नहीं है, तो इसे 0 पर सेट करें. अगर डेटा है, तो इसे मौजूदा लंबाई पर सेट करें. उदाहरण के लिए,curlके साथ अपने अनुरोध में-H "Content-Length: 0"जोड़ें.
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
<FormParams> को कॉपी करने पर, <Copy> मैसेज के Content-Type को "application/x-www-form-urlencoded" पर सेट करता है. इसके बाद, मैसेज को टारगेट सेवा पर भेजता है.
<Headers> (<Copy> का बच्चा)
यह <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध या जवाब के मैसेज से, एचटीटीपी हेडर को से <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
दूसरा उदाहरण
सभी हेडर कॉपी करने के लिए, खाली <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", और "h3" की दूसरी वैल्यू कॉपी की गई है. अगर "h3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<Path> (<Copy> का बच्चा)
इससे यह तय होता है कि पाथ को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया जाना चाहिए या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" है, तो यह नीति <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध मैसेज के पाथ को से <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> का बच्चा)
इससे यह तय होता है कि पेलोड को सोर्स से डेस्टिनेशन पर कॉपी किया जाना चाहिए या नहीं. सोर्स और डेस्टिनेशन, अनुरोध या जवाब हो सकते हैं.
अगर इस नीति को "true" पर सेट किया जाता है, तो यह नीति, <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> को "true" पर सेट किया गया है, ताकि अनुरोध के पेलोड को अनुरोध से जवाब में कॉपी किया जा सके:
<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> का बच्चा)
यह क्वेरी स्ट्रिंग पैरामीटर को <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध से <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
दूसरा उदाहरण
इस उदाहरण में, अनुरोध के सभी क्वेरी पैरामीटर को नए कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया गया है:
<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", और "qp3" की दूसरी वैल्यू कॉपी की गई है. अगर "qp3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<QueryParams> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
<ReasonPhrase> (<Copy> का बच्चा)
इससे यह तय होता है कि सोर्स रिस्पॉन्स से डेस्टिनेशन रिस्पॉन्स में, वजह बताने वाला वाक्यांश कॉपी किया जाना चाहिए या नहीं. इस एलिमेंट से अनुरोध पर कोई असर नहीं पड़ता.
अगर "सही है" पर सेट है, तो यह नीति <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए जवाब से <AssignTo> एलिमेंट से तय किए गए जवाब तक ReasonPhrase को कॉपी करती है.
| डिफ़ॉल्ट वैल्यू | गलत |
| ज़रूरी है? | वैकल्पिक |
| समस्या | बूलियन |
| पैरंट एलिमेंट |
<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> का बच्चा)
इस कुकी से यह तय होता है कि स्टेटस कोड को सोर्स रिस्पॉन्स से डेस्टिनेशन रिस्पॉन्स में कॉपी किया गया है या नहीं. इस एलिमेंट से अनुरोध पर कोई असर नहीं पड़ता.
अगर "true" है, तो यह नीति, <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए रिस्पॉन्स मैसेज से स्टेटस कोड को <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> का बच्चा)
इससे यह तय होता है कि एचटीटीपी वर्ब को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया गया है या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" है, तो <Copy> एलिमेंट के source एट्रिब्यूट में मौजूद क्रिया को <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> को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध से क्रिया को नए, कस्टम अनुरोध में कॉपी किया जाता है:
<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> का बच्चा)
यह कुकी तय करती है कि एचटीटीपी वर्शन को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया गया है या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" पर सेट है, तो <Copy> एलिमेंट के source एट्रिब्यूट में मौजूद एचटीटीपी वर्शन को, <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> को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध ऑब्जेक्ट से वर्शन को नए, कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया जाता है:
<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 एट्रिब्यूट के साथ किया जाता है. इससे, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) के प्रॉक्सी एडिटर में नीति को लेबल किया जा सकता है. इसके लिए, किसी दूसरे और ज़्यादा स्वाभाविक नाम का इस्तेमाल किया जाता है.
<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> को "सही" पर सेट करने का तरीका बताया गया है:
<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>
यह कुकी, किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज पेलोड को हटाती है. मैसेज, अनुरोध या जवाब हो सकता है. <AssignTo> एलिमेंट का इस्तेमाल करके, यह तय किया जाता है कि <Remove> किस मैसेज पर कार्रवाई करेगा.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | कॉम्प्लेक्स टाइप |
| पैरंट एलिमेंट |
<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
जवाब के फ़्लो में, यह नीति जवाब के मुख्य हिस्से को हटा देती है. साथ ही, क्लाइंट को सिर्फ़ एचटीटीपी हेडर दिखाती है.
दूसरा उदाहरण
यहां दिए गए उदाहरण में, 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> का बच्चा)
यह फ़ंक्शन, अनुरोध से तय किए गए फ़ॉर्म पैरामीटर हटाता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | <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
यहां दिए गए उदाहरण में, अनुरोध से तीन फ़ॉर्म पैरामीटर हटाए गए हैं:
<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", और "f3" की दूसरी वैल्यू को हटाया गया है. अगर "f3" में सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाएगा.
<FormParams> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- मैसेज का टाइप: अनुरोध
Content-Type: "application/x-www-form-urlencoded"
<Headers> (<Remove> का बच्चा)
यह अनुरोध या जवाब से, बताए गए एचटीटीपी हेडर हटाता है. यह <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
पहला उदाहरण
यहां दिए गए उदाहरण में, अनुरोध से 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", और "h3" की दूसरी वैल्यू को हटाया गया है. अगर "h3" में सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाता.
<Payload> (<Remove> का बच्चा)
यह कुकी तय करती है कि <Remove>, अनुरोध या जवाब में मौजूद पेलोड को मिटाता है या नहीं. यह पेलोड, <AssignTo> एलिमेंट से तय होता है. पे लोड को मिटाने के लिए, इसे "सही" पर सेट करें. ऐसा न करने पर, इसे "गलत" पर सेट करें. इसकी डिफ़ॉल्ट वैल्यू "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> का बच्चा)
यह फ़ंक्शन, अनुरोध से तय किए गए क्वेरी पैरामीटर हटाता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | <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
यहां दिए गए उदाहरण में, अनुरोध से एक क्वेरी पैरामीटर हटाया गया है:
<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", और "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> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
<Set>
यह अनुरोध या जवाब के मैसेज में ऐसी जानकारी सेट करता है जिसे <AssignTo> एलिमेंट से तय किया जाता है. <Set> हेडर या क्वेरी या फ़ॉर्म पैरामीटर को बदल देता है. ये पैरामीटर, मूल मैसेज में पहले से मौजूद होते हैं. किसी एचटीटीपी मैसेज में हेडर, क्वेरी, और फ़ॉर्म पैरामीटर में एक से ज़्यादा वैल्यू हो सकती हैं. किसी हेडर या पैरामीटर के लिए अतिरिक्त वैल्यू जोड़ने के लिए, <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> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: अनुरोध
अगर आपने अपनी नीति (<Add><FormParams/></Add>) में फ़ॉर्म के खाली पैरामीटर तय किए हैं, तो नीति में फ़ॉर्म के कोई भी पैरामीटर नहीं जोड़े जाते. यह <FormParams> को शामिल न करने जैसा ही है.
<Set>, मैसेज के Content-Type को "application/x-www-form-urlencoded" में बदलता है. इसके बाद, इसे टारगेट एंडपॉइंट पर भेजता है.
<Headers> (<Set> का बच्चा)
यह अनुरोध या जवाब में मौजूद एचटीटीपी हेडर को बदल देता है. इसे <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> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी हों:
- एचटीटीपी वर्ब: 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' (जब <AssignTo> के createNew एट्रिब्यूट को 'true' पर सेट किया जाता है) |
| ज़रूरी है? | वैकल्पिक |
| समस्या | स्ट्रिंग या 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> का बच्चा)
यह अनुरोध पर एचटीटीपी वर्ब सेट करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | स्ट्रिंग या 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> का बच्चा)
यह कुकी, अनुरोध पर एचटीटीपी वर्शन सेट करती है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
| डिफ़ॉल्ट वैल्यू | लागू नहीं |
| ज़रूरी है? | वैकल्पिक |
| समस्या | स्ट्रिंग या 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 नीति का इस्तेमाल किया जा सकता है. कस्टम अनुरोध बनाने के बाद, इसे इन तरीकों से इस्तेमाल किया जा सकता है:
- अन्य नीतियों में इसके वैरिएबल ऐक्सेस करना
- इसे किसी बाहरी सेवा को पास करें
कस्टम अनुरोध मैसेज बनाने के लिए, AssignMessage नीति में <AssignTo> एलिमेंट का इस्तेमाल करें. 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 पर, यह नीति:
- यह कुकी, आने वाले अनुरोध से
user-agentएचटीटीपी हेडर की वैल्यू को नए मैसेज में कॉपी करती है.<Copy>,user-agentफ़्लो वैरिएबल के ऐब्सलूट रेफ़रंस का इस्तेमाल करता है. इसलिए,<Copy>के लिएsourceएट्रिब्यूट की वैल्यू देने की ज़रूरत नहीं है. - यह कस्टम मैसेज पर
addressक्वेरी पैरामीटर को, आने वाले अनुरोध केaddyक्वेरी पैरामीटर की वैल्यू पर सेट करता है. - इस विकल्प की मदद से, एचटीटीपी वर्ब को
GETपर सेट किया जाता है.
- यह कुकी, आने वाले अनुरोध से
- इस कुकी से
<IgnoreUnresolvedVariables>को "false" पर सेट किया जाता है. जब<IgnoreUnresolvedVariables>की वैल्यू "गलत है" पर सेट होती है, तो अगर नीति के ज़रिए जोड़े जाने वाले किसी एक वैरिएबल का डेटा मौजूद नहीं होता है, तो Edge, एपीआई फ़्लो में प्रोसेसिंग बंद कर देगा.
उदाहरण 2
यहां एक और उदाहरण दिया गया है, जिसमें AssignMessage का इस्तेमाल करके कस्टम अनुरोध ऑब्जेक्ट बनाने का तरीका बताया गया है:
<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 नीति का इस्तेमाल करने के फ़ायदों के बारे में जानें. |
| AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट कॉपी करना | AssignMessage नीति का इस्तेमाल करके, एपीआई अनुरोध या जवाब से एलिमेंट कॉपी करें और नया अनुरोध या जवाब ऑब्जेक्ट बनाएं. |
| AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट हटाना | AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट हटाएं और टारगेट बैकएंड तक पहुंचने से पहले एपीआई में बदलाव करें. |
| AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट जोड़ना और सेट करना | AssignMessage नीति का इस्तेमाल करके, क्वेरी पैरामीटर, हेडर, फ़ॉर्म पैरामीटर या पेलोड जोड़कर, एपीआई अनुरोध या जवाब में बदलाव करें. |
| AssignMessage नीति का इस्तेमाल करके कस्टम वैरिएबल बनाना | AssignMessage नीति का इस्तेमाल करके, कस्टम फ़्लो वैरिएबल सेट करें. साथ ही, एपीआई प्रॉक्सी में मौजूद अन्य नीतियों में वैरिएबल का फ़ायदा पाएं. |
| AssignMessage नीति का इस्तेमाल करके, नए अनुरोध या जवाब ऑब्जेक्ट बनाना | एपीआई रनटाइम पर AssignMessage नीति का इस्तेमाल करके, नए एपीआई अनुरोध या जवाब ऑब्जेक्ट बनाएं. |
| AssignMessage नीति का इस्तेमाल करके, मॉक एपीआई बनाना | रिस्पॉन्स फ़्लो में AssignMessage नीति जोड़कर, एक सामान्य मॉक REST API बनाएं. |
| AssignMessage नीति का इस्तेमाल करके, पेलोड सेट करना या उसमें बदलाव करना | API रनटाइम पर AssignMessage नीति का इस्तेमाल करके, SOAP पेलोड सेट करके REST अनुरोध को SOAP अनुरोध में बदलें नीति. |
गड़बड़ी के कोड
इस सेक्शन में, गड़बड़ी के कोड और गड़बड़ी के मैसेज के बारे में बताया गया है. साथ ही, इन गड़बड़ियों के वैरिएबल के बारे में भी बताया गया है, जो Edge की मदद से सेट किए जाते हैं. यह जानकारी जानना ज़रूरी है कि क्या आप गड़बड़ियों को ठीक करता है. ज़्यादा जानने के लिए, आपके लिए ज़रूरी जानकारी देखें नीति से जुड़ी गड़बड़ियों और हैंडलिंग के बारे में जानकारी गलतियां.
रनटाइम की गड़बड़ियां
नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.
| गड़बड़ी कोड | एचटीटीपी कोड स्थिति | वजह | ठीक करें |
|---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | नीति, वैरिएबल सेट नहीं कर सकी. नाम के लिए गड़बड़ी वाली स्ट्रिंग देखें वैरिएबल सेट न किए गए हों. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
यह गड़बड़ी तब होती है, जब मैसेज टाइप वैरिएबल, सभी एचटीटीपी अनुरोधों और जवाबों को दिखाते हैं. बिल्ट-इन Edge
फ़्लो वैरिएबल |
build |
steps.assignmessage.UnresolvedVariable |
500 |
यह गड़बड़ी तब होती है, जब मैसेज असाइन करें नीति में तय किया गया वैरिएबल:
|
build |
डिप्लॉयमेंट से जुड़ी गड़बड़ियां
ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाली प्रॉक्सी को डिप्लॉय किया जाता है.
| गड़बड़ी का नाम | वजह | ठीक करें |
|---|---|---|
InvalidIndex |
अगर 'असाइन करें' मैसेज के <Copy> और/या <Remove> एलिमेंट में इस इंडेक्स के बारे में बताया गया है
नीति शून्य या नेगेटिव संख्या है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.
|
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>
स्कीमा
नीति के हर टाइप को एक्सएमएल स्कीमा (.xsd) के ज़रिए तय किया जाता है. रेफ़रंस के लिए, नीति के स्कीमा GitHub पर उपलब्ध हैं.
मिलते-जुलते विषय
AssignMessage नीति के काम करने के सैंपल, API Platform के सैंपल में उपलब्ध हैं.
ProxyEndpoint से target.url को बदलने के तरीके का ज़्यादा बेहतर उदाहरण देखने के लिए, Apigee कम्यूनिटी का यह लेख पढ़ें.
ServiceCallout नीति में "सेट पाथ" को ऐक्शन में देखने के लिए, Apigee GitHub के सैंपल में यह उदाहरण देखें और खुद करके सीखें. बस रिपॉज़िटरी को क्लोन करें और उस विषय में दिए गए निर्देशों का पालन करें. इस उदाहरण में, AssignMessage नीति का इस्तेमाल करके अनुरोध का पाथ सेट किया गया है. इसके बाद, Service Callout नीति का इस्तेमाल करके बाहरी सेवा से अनुरोध किया गया है.