أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
![]()
الأدوات المستخدمة
تغيّر سياسة 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
السياسة التلقائية
يعرض المثال التالي الإعدادات التلقائية عند إضافة سياسة AssignMessage إلى التدفق في واجهة مستخدم Edge:
<AssignMessage continueOnError="false" enabled="true" name=&quo>t;a<ssign-messa>ge-default"< DisplayNa>meA<ssign Messa>ge-<1/DisplayName Prope>rties</ Copy> sour<ce="req>uest&<quot; H>eader<s/ Q>ueryP<arams>/ < FormParams>/ < Payload/ > Verb</ > St<atusC>ode</ >Reaso<nPhrase>/ P<ath/ /Copy Re>move < Head>ers < Header> name=&<quot;h1"/ /H>eader<s QueryP>arams< Que>ryParam< name="q1">/ < /QueryPara>ms < FormPa>ram<s > Fo<rmP>aram <name=&qu>ot;f1<"/ >/Form<Params >Pay<load>/ < /R>emove< Add > He<aders/ Q>ueryP<arams/ >FormP<aram<s/ > /A<dd >Set> <Heade>rs/< > Qu<eryParams/ > Form<Para>ms/ < !>-- Ve<rbGET/>Verb <-- > <Path/ /Set >Ass<ignVariable Namename/>Name < Value/ Ref/ /Assig>nVa<riable IgnoreUnresolvedVariablestrue /IgnoreUnresolvedV>a<riables Assi>gnTo createNew="false" transport="http" type="request"/ /AssignMessage
عند إدراج سياسة AssignMessage جديدة في واجهة مستخدم Edge، يحتوي النموذج على عناصر نائبة لجميع العمليات المحتملة. عادةً، يمكنك اختيار العمليات التي تريد تنفيذها باستخدام هذه السياسة وإزالة بقية العناصر الفرعية. على سبيل المثال، إذا كنت تريد تنفيذ عملية نسخ، استخدِم العنصر <Copy> وأزِل العناصر الفرعية <Add> و<Remove> وغيرها من السياسة لتسهيل قراءتها.
يتضمن هذا العنصر السمات التالية الشائعة لجميع السياسات:
| السمة | تلقائي | مطلوب | الوصف |
|---|---|---|---|
name |
لا ينطبق | مطلوب |
الاسم الداخلي للسياسة. يمكن أن تحتوي قيمة السمة اختياريًا، يمكنك استخدام العنصر |
continueOnError |
false | إجراء اختياري | يمكنك ضبطها على "خطأ" لعرض رسالة خطأ عند تعذّر تنفيذ إحدى السياسات. ويُعدّ هذا سلوكًا متوقعًا في معظم السياسات. يمكنك ضبط القيمة على "صحيح" للاستمرار في تنفيذ العملية حتى بعد تعذُّر تنفيذ سياسة. |
enabled |
صحيح | إجراء اختياري | اضبط القيمة على "true" لفرض السياسة. اضبط هذه القيمة على "false" على "إيقاف" السياسة. لن يتم فرض السياسة حتى إذا ظلت مرتبطة بتدفق. |
async |
false | منهي العمل به | تم إيقاف هذه السمة نهائيًا. |
يقدّم الجدول التالي وصفًا عالي المستوى للعناصر الفرعية من <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لا ينشئ هذا المثال رسالة جديدة. بدلاً من ذلك، يتم تعديل رسالة استجابة حالية من خلال إضافة عنوان HTTP.
بما أنّ هذا المثال يحدّد response كاسم المتغيّر في العنصر <AssignTo>، تعدّل هذه السياسة عنصر الاستجابة الذي تم ضبطه في الأصل باستخدام البيانات التي يعرضها الخادم المستهدف.
يتم استخلاص عنوان HTTP الذي تضيفه هذه السياسة إلى رسالة الاستجابة من متغيّر تتم تعبئته بواسطة سياسة LookupCache. لذلك، تحتوي رسالة الردّ المعدَّلة بموجب سياسة "تعيين الرسالة" هذه على عنوان HTTP يشير إلى ما إذا كان قد تم استرداد النتائج من ذاكرة التخزين المؤقت أم لا. يمكن أن يكون ضبط العناوين في الرد مفيدًا لتحديد المشاكل وحلّها.
4: ضبط المحتوى الديناميكي
يمكنك استخدام Assign Message لتضمين محتوى ديناميكي في حمولة رسائل الرد والطلب.
لتضمين متغيرات تدفق Edge في حمولة XML، ضَع المتغير المحدّد بين قوسين معقوفين، على النحو التالي: {prefix.name}.
يضمّن المثال التالي قيمة متغيّر تدفق عنوان HTTP user-agent في عنصر XML يُسمى User-agent:
<AssignMessage name="AM-set-dynamic-con>ten<t"<>/span> Assign<Torespons>e/A<ssi>gnTo < Set Payload contentType=>"t<ext/xml&qu>ot; User-agent{reques<t.header.us>er-ag<ent}/Use>r-a<gent> < /Payload /Set Ignor>eUnresol<vedVariablesfalse /Ignor>e<UnresolvedVari>ables /AssignMessage
بالنسبة إلى حمولات JSON، يمكنك إدراج متغيرات باستخدام السمتَين variablePrefix وvariableSuffix مع أحرف فاصلة كما هو موضّح في المثال التالي:
<AssignMessage name="set-pay>loa<d" Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" { "user<-agent&q>u<ot;: "@re>quest.header.user-agent#" } /Payload /AssignMessage
للاطّلاع على قائمة كاملة بمتغيرات سير العمل، يُرجى الرجوع إلى مرجع متغيرات سير العمل.
اعتبارًا من الإصدار 16.08.17 من السحابة الإلكترونية، يمكنك أيضًا استخدام الأقواس المعقوفة لإدراج المتغيرات.
5: إزالة مَعلمة طلب البحث
يزيل المثال التالي مَعلمة طلب البحث apikey من الطلب:
<AssignMessage name="AM-remove-query-p>ara<m">;
R<emove
Q>ueryPar<ams
QueryParam name>=&quo<t;apikey&quo>t;/<
/Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageمن أفضل الممارسات إزالة مَعلمة طلب البحث apikey من رسالة الطلب عند استخدام سياسة VerifyAPIKey لمصادقة المستخدم. ويتم ذلك لمنع تمرير معلومات أساسية حساسة إلى الخلفية المستهدَفة.
6: ضبط المتغيّرات أو الحصول عليها
يستخدم المثال التالي ثلاث سياسات "تعيين الرسالة":
- إنشاء ثلاثة متغيّرات للتدفق في الطلب، مع قيم ثابتة
- الحصول على متغيرات التدفق بشكل ديناميكي في سياسة ثانية في تدفق الطلب
- يتم ضبطها في حمولة الردّ
<!-- 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>لإضافة المتغيّرات إلى الردّ. ينشئ المثال التالي حمولة XML في الردّ الذي يعرضه Edge للعميل:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name=&qu>ot;<put-em-in-t>he-payload" Di<splayNameput>-em<-in>-the-<payload/DisplayName Set Payload> conten<tType=&>quot;appl<icatio>n/xml&qu<ot; > wrappe<r > secret{<secret}/sec>ret c<onfig > environ<ment{env>ironment}/<environme>nt < pro>tocol{p<rotocol}>/prot<ocol > < /c>onf<ig /wrapper /Pa>yload < /Set IgnoreUnresolvedVa>ria<blestrue /IgnoreUnresolvedVariables AssignTo createNew=&>q<uot;false">; transport="http" type="response"/ /AssignMessage
يُرجى العِلم أنّ بنية الوصول إلى متغيرات التدفق في
<Set>هي وضعها بين أقواس معقوفة.احرص على ضبط السمة
contentTypeللعنصر<Payload>على "application/xml". - أرسِل طلبًا إلى خادم وكيل واجهة برمجة التطبيقات، مثل:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
يمكنك اختياريًا نقل النتائج من خلال أداة مثل
xmllintحتى يتم عرض XML في بنية منسَّقة بشكل جيد:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
يجب أن يظهر نص الاستجابة على النحو التالي:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: الحصول على عناوين استجابة "وسيلة الشرح الخاصة بالخدمة"
في المثال التالي، لنفترض أنّ سياسة ServiceCallout مضمّنة في طلب خادم وكيل لواجهة برمجة التطبيقات، وأنّ استجابة طلب البيانات الخارجية تتضمّن عناوين متعدّدة تحمل الاسم نفسه (Set-Cookie). وبافتراض أنّ متغيّر استجابة طلب البيانات الخارجية هو 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}يحتوي كل عنصر فرعي في هذا المرجع على أمثلة إضافية. للاطّلاع على المزيد من الأمثلة، يُرجى الرجوع إلى مثال AssignMessage على GitHub.
مرجع العنصر الفرعي
يوضّح هذا القسم العناصر الفرعية من <AssignMessage>.
<Add>
تضيف هذه السمة معلومات إلى الطلب أو الرد، ويتم تحديدها من خلال العنصر <AssignTo>.
يضيف العنصر <Add> خصائص جديدة إلى الرسالة غير متوفّرة في الرسالة الأصلية. لتغيير قيم الخصائص الحالية، استخدِم العنصر <Set>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | نوع معقّد |
| العنصر الأصل |
<AssignMessage>
|
| العناصر الفرعية |
<FormParams><Headers><QueryParams> |
يستخدم العنصر <Add> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_na>me"<;
Add
FormParams
F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
< ...
/FormParams
> Headers
< Head>er name="h<eader_na>me&qu<ot;header_v>alue/He<ader
...
/Headers
Q>ueryParams
< QueryParam> name="que<ryparam_name>&qu<ot;q>u<eryparam_value>/QueryParam
...
/QueryParams
/Add
/AssignMessageالمثال 1
يستخدم المثال التالي العنصر <FormParams> للحصول على قيم ثلاث مَعلمات لسلسلة طلب البحث من الطلب الأوّلي وضبطها كمَعلمات نموذج في طلب نقطة النهاية المستهدَفة:
<AssignMessage name="AM-add-formpara>ms-<3&q>uot;
< Add
>FormPar<ams
FormParam name=>"username"{requ<est.queryp>aram.na<me}/FormParam
FormP>aram name="zip_code&quo<t;{request>.queryp<aram.zipCode}/FormParam
For>mParam name="default<_language&>quot;<{request.qu>ery<para>m.l<ang}/F>ormPa<ram
/For>mPa<rams
>/Ad<d
Remo>ve
<QueryPara>m<s/
/Remove
> AssignTorequest/AssignTo
/AssignMessageالمثال 2
يستخدم المثال التالي العنصر <Headers> لإضافة عنوان partner-id إلى الطلب الذي سيتم إرساله إلى نقطة النهاية المستهدَفة:
<AssignMessage name="AM-add-heade>rs-<1&q>uot;
< Add
> Head<ers
Header name=&q>uot;partner-id"{verifyapikey.VAK-1.devel<oper.ap>p.par<tner-id}>/He<ader>
< /Heade>rs
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageالمثال 3
يستخدم المثال التالي العنصر <QueryParams> لإضافة مَعلمة طلب بحث واحدة بقيمة ثابتة إلى الطلب:
<AssignMessage name="AM-add-querypara>ms-<1&q>uot;
< Add
Q>ueryPar<ams
QueryParam name>=&<quot;myPara>m&quo<t;42/QueryPa>ram<
> /Q<ueryPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageيستخدم هذا المثال <Add> في عملية التحضير المسبق للطلب. إذا نظرت إلى النتائج في أداة مثل أداة التتبُّع، سيصبح الطلب إلى https://example-target.com/get هو https://example-target.com/get?myParam=42.
تتيح العناصر الفرعية من <Add> استبدال السلسلة الديناميكية، المعروفة باسم
قوالب الرسائل.
<FormParams> (عنصر ثانوي من <Add>)
تضيف هذه السمة مَعلمات نموذج جديدة إلى رسالة الطلب. ليس لهذا العنصر أي تأثير في رسالة الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <FormParam> |
| العنصر الأصل |
<Add>
|
| العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Add FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/FormParam ... /FormParams AssignTo createNew="[true|false]&qu>ot; transport="http&<quot; > ty<pe=&>q<uot;[request|r>esponse]"destination_variable_name/AssignTo /Add /AssignMessage
المثال 1
يضيف المثال التالي مَعلمة نموذج واحدة ("answer") وقيمة ثابتة ("42") إلى الطلب:
<AssignMessage name="AM-add-formpara>ms-<1&q>uot;
< Add
>FormPar<ams
FormParam nam>e=<"answ>er&qu<ot;42/FormP>ara<m
> /<FormPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageالمثال 2
يحصل المثال التالي على قيمة مَعلمة طلب البحث name ويضيفها إلى الطلب كمَعلمة نموذج، ثم يزيل مَعلمة طلب البحث:
<AssignMessage name="AM-Swap-QueryParam-to-FormPa>ram<s&q>uot;
< Add
FormParam n>ame="name"{requ<est.queryp>ara<m.na>me}</FormP>aram
< /Add
Remove
Que>ryP<aram na>m<e="name&q>uot;/
/Remove
/AssignMessageيُرجى العِلم أنّ هذا المثال لا يحدّد هدفًا باستخدام <AssignTo>. تضيف هذه السياسة المَعلمة
إلى الطلب فقط.
المثال 3
يضيف المثال التالي مَعلمات نماذج متعدّدة إلى الطلب:
<AssignMessage name="AM-add-formpara>ms-<3&q>uot;
< Add
>FormPar<ams
FormParam name=>"username"{requ<est.queryp>aram.na<me}/FormParam
FormP>aram name="zip_code&quo<t;{request>.queryp<aram.zipCode}/FormParam
For>mParam name="default<_language&>quot;<{request.qu>ery<para>m.l<ang}/F>ormPa<ram
/For>mPa<rams
>/Ad<d
Remo>ve
<QueryPara>m<s/
/Remove
> AssignTorequest/AssignTo
/AssignMessageيحصل هذا المثال على مَعلمات سلسلة طلب البحث من الطلب الأصلي ويضيفها كمَعلمات نموذج بأسماء مختلفة. ثم يزيل مَعلمات طلب البحث الأصلية. سترسل Apigee الطلب المعدَّل إلى نقطة النهاية المستهدَفة.
يمكنك استخدام أداة التتبُّع للاطّلاع على المسار. ستلاحظ أنّ نص الطلب يتضمّن بيانات النموذج المرمّزة في عنوان URL، والتي تم تمريرها في الأصل كمَعلمات سلسلة طلب البحث:
username=nick&zip_code=90210&default_language=en
يمكنك استخدام <FormParams> فقط عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: طلب
- أحد الإجراءَين التاليَين (أو كلاهما):
- بيانات النموذج: يتم ضبطها على قيمة معيّنة أو "" (السلسلة الفارغة). على سبيل المثال، مع
curl، أضِف-d ""إلى طلبك. - يجب ضبط قيمة العنوان
Content-Lengthعلى 0 (في حال عدم توفّر بيانات في الطلب الأصلي، وإلا يجب ضبطها على الطول الحالي بالبايت). على سبيل المثال، يمكنك إضافةcurladd-H "Content-Length: 0"إلى طلبك.
- بيانات النموذج: يتم ضبطها على قيمة معيّنة أو "" (السلسلة الفارغة). على سبيل المثال، مع
على سبيل المثال:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
عند إضافة <FormParams>، يضبط Edge عنوان Content-Type للطلب على "application/x-www-form-urlencoded" قبل إرسال الرسالة إلى الخدمة المستهدَفة.
<Headers> (عنصر ثانوي من <Add>)
تضيف هذه السمة عناوين جديدة إلى الطلب أو الردّ المحدّدَين، واللذين يحدّدهما العنصر <AssignTo>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <Header> |
| العنصر الأصل |
<Add>
|
| العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy>_name&q<uot;
Add
Headers
> Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
> ...
/Headers
/Add
/AssignMessageالمثال 1
يضيف المثال التالي عنوان partner-id إلى رسالة الطلب،
ويعيّن قيمة متغيّر التدفق verifyapikey.VAK-1.developer.app.partner-id إلى هذا العنوان.
<AssignMessage name="AM-add-heade>rs-<1&q>uot;
< Add
> Head<ers
Header name=&q>uot;partner-id"{verifyapikey.VAK-1.devel<oper.ap>p.par<tner-id}>/He<ader>
< /Heade>rs
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessage<QueryParams> (عنصر ثانوي من <Add>)
تضيف هذه السمة مَعلمات طلب بحث جديدة إلى الطلب. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <QueryParam> |
| العنصر الأصل |
<Add>
|
| العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_nam>e"<
Add
QueryParams
Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
..>.
/QueryParams
/Add
/AssignMessageالمثال 1
يضيف المثال التالي مَعلمة طلب البحث "myParam" إلى الطلب ويُعيّن لها القيمة "42":
<AssignMessage name="AM-add-querypara>ms-<1&q>uot;
< Add
Q>ueryPar<ams
QueryParam name>=&<quot;myPara>m&quo<t;42/QueryPa>ram<
> /Q<ueryPara>ms
/A<dd
Assi>g<nTorequest/Ass>ignTo
/AssignMessageيمكنك استخدام <QueryParams> فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
بالإضافة إلى ذلك، لا يمكنك ضبط مَعلمات طلب البحث إلا عندما تكون السمة type للعنصر <AssignTo> عبارة عن رسالة طلب. ولن يؤدي ضبطها على الرد إلى أي تأثير.
إذا حدّدت مصفوفة فارغة من مَعلمات طلب البحث في سياستك (<Add><QueryParams/></Add>)، لن تضيف السياسة أي مَعلمات طلب بحث. وهذا الإجراء مماثل لحذف <QueryParams>.
<AssignTo>
تحدّد هذه السمة الكائن الذي تعمل عليه سياسة AssignMessage. تتضمّن الخيارات ما يلي:
- رسالة الطلب:
requestالتي يتلقّاها خادم وكيل واجهة برمجة التطبيقات - رسالة الاستجابة:
responseالذي تم إرجاعه من الخادم المستهدف - رسالة مخصّصة: عنصر طلب أو استجابة مخصّص
يُرجى العِلم أنّه في بعض الحالات، لا يمكنك تغيير العنصر الذي تعمل عليه سياسة AssignMessage.
على سبيل المثال، لا يمكنك استخدام <Add> أو <Set> لإضافة معلمات طلب البحث (<QueryParams>) أو معلمات النموذج (<FormParams>) أو تغييرها في الردّ. يمكنك فقط تعديل مَعلمات طلب البحث ومَعلمات النموذج في الطلب.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<AssignMessage>
|
| العناصر الفرعية | بدون |
في حال عدم تحديد <AssignTo>، أو في حال تحديد العنصر <AssignTo> ولكن بدون تحديد قيمة نصية للعنصر، ستسري السياسة على الطلب أو الردّ التلقائيين، استنادًا إلى مكان تنفيذ السياسة. إذا تم تنفيذ السياسة في مسار الطلب، ستؤثّر في رسالة الطلب. إذا تم تنفيذها في مسار الاستجابة، ستؤثر السياسة في الاستجابة تلقائيًا.
يستخدم العنصر <AssignTo> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" AssignTo createNew="[true|false]" transp>ort="http" <type=&quo>t<;[request|resp>onse]"destination_variable_name/AssignTo /AssignMessage
المثال 1
يوضّح المثال التالي أنّ الهدف هو الطلب الأصلي الذي سيتم إرساله إلى نقطة النهاية المستهدَفة:
<AssignMessage name="assign>t<o-1" !-- DO NOT >do <this -- AssignTo createNew="false" transport=&q>u<ot;http" >type="request"/ /AssignMessage
المثال 2
ينشئ المثال التالي عنصر طلب جديدًا:
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
عند إنشاء عنصر طلب أو رد جديد، تعمل العناصر الأخرى في سياسة AssignMessage (مثل <Add> و<Set> و<Copy>) على عنصر الطلب الجديد هذا.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في المسار، أو إرسال عنصر الطلب الجديد إلى خدمة خارجية باستخدام سياسة ServiceCallout.
المثال 3
ينشئ المثال التالي عنصر طلب جديدًا باسم "MyRequestObject":
<AssignMessage name="assign>to-<2" AssignTo createNew="true" transport=&"http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo /AssignMessage
عند إنشاء عنصر طلب أو رد جديد، تعمل العناصر الأخرى في سياسة AssignMessage (مثل <Add> و<Set> و<Copy>) على عنصر الطلب الجديد هذا.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في المسار، أو إرسال عنصر الطلب الجديد إلى خدمة خارجية باستخدام سياسة ServiceCallout.
يوضّح الجدول التالي سمات النوع <AssignTo>:
| السمة | الوصف | مطلوب؟ | النوع |
|---|---|---|---|
createNew |
تحدّد ما إذا كانت هذه السياسة تنشئ رسالة جديدة عند تعيين القيم. إذا كانت القيمة "true"، تنشئ السياسة متغيّرًا جديدًا من النوع المحدّد بواسطة إذا كانت القيمة "false"، ستستجيب السياسة بإحدى الطريقتَين التاليتَين:
في حال عدم تحديد
|
اختياري | منطقي |
transport |
تحدّد هذه السمة نوع النقل لنوع رسالة الطلب أو الردّ. القيمة التلقائية هي "http" (وهي القيمة الوحيدة المتاحة). |
اختياري | سلسلة |
type |
تحدّد هذه السمة نوع الرسالة الجديدة عندما تكون قيمة createNew هي "true". القيم الصالحة هي "طلب" أو "رد".
في حال حذف هذه السمة، ينشئ 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
المثال 1
يحدّد المثال التالي المتغيّر الوجهة على أنّه myvar، ويضبطه على القيمة الحرفية "42":
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
إذا لم يكن myvar متوفّرًا، ينشئه <AssignVariable>.
<Ref> (عنصر ثانوي من <AssignVariable>)
تحدّد هذه السمة مصدر عملية التعيين كمتغيّر في التدفق. يمكن أن يكون متغيّر التدفق أحد متغيّرات التدفق المحدّدة مسبقًا (كما هو موضّح في مرجع متغيّرات التدفق)، أو متغيّر تدفق مخصّص أنشأته.
يتم دائمًا تفسير قيمة <Ref> على أنّها متغيّر تدفّق، ولا يمكنك تحديد سلسلة حرفية كقيمة. لتعيين قيمة سلسلة حرفية، استخدِم العنصر <Value> بدلاً من ذلك.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<AssignVariable>
|
| العناصر الفرعية | بدون |
عند تحديد متغيّر تدفق باستخدام <Ref>، احذف الأقواس المحيطة "{}" التي تستخدمها عادةً للإشارة إلى متغيّر تدفق. على سبيل المثال،
لضبط قيمة المتغيّر الجديد على قيمة المتغيّر client.host flow،
اتّبِع الخطوات التالية:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
لتحديد قيمة تلقائية لمتغيّر مسار الوجهة، استخدِم <Value>
بالاقتران مع <Ref>. إذا لم يكن متغيّر التدفق المحدّد بواسطة <Ref> متوفّرًا أو لا يمكن قراءته أو كانت قيمته فارغة، سيُعيّن 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 المتغيّر flow
أو مَعلمة طلب البحث Country فارغة أو غير قابلة للقراءة أو غير صالحة، يحدّد Edge
القيمة "ErrorOnCopy" للمتغيّرات الجديدة.
المثال 3
من حالات الاستخدام الشائعة لـ <AssignVariable> ضبط القيمة التلقائية لمَعلمة طلب البحث أو العنوان أو أي قيمة أخرى يمكن تمريرها مع الطلب. على سبيل المثال، يمكنك إنشاء وكيل لواجهة برمجة تطبيقات خاصة بالطقس، حيث يتضمّن الطلب مَعلمة طلب بحث واحدة باسم "w". تحتوي هذه المَعلمة على معرّف المدينة التي تريد معرفة حالة الطقس فيها. يتضمّن عنوان URL للطلب التنسيق التالي:
http://myCO.com/v1/weather/forecastrss?w=city_ID
لتحديد قيمة تلقائية للمتغيّر "w"، أنشئ سياسة AssignMessage على النحو التالي:
<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3" AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/ > I<gnoreUnresolve>dVari<able>strue /IgnoreUnres<olved>Varia<ble>s AssignVariable < N>amere<quest>.querypa<ram.w/>Nam<e Refreques>t<.queryparam.w/>Ref Value12797282/Value /AssignVariable /AssignMessage
في هذا المثال، تحصل <AssignVariable> على قيمة request.queryparam.w
وتعيّنها لنفسها. إذا كان متغيّر التدفق فارغًا، أي تم حذف مَعلمة طلب البحث "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
المثال 2
يحدّد المثال التالي متغيّرًا في التدفق، حيث تكون قيمة المتغيّر هي نموذج رسالة محدّد مسبقًا. استخدِم هذا الخيار إذا كنت تريد إدخال نموذج محدّد مسبقًا في وقت التشغيل بدون الحاجة إلى تعديل السياسة:
<AssignMessage name='AV-via-template-indirec>tly<39; IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='my_templat>e_v<ariable'/ > </AssignVariabl>e /AssignMessage
المثال 3
يحدّد المثال التالي متغيّرًا في التدفق وقيمة نصية. في هذه الحالة، إذا كان المتغيّر المشار إليه غير فارغ، يتم استخدام هذه القيمة كنموذج. إذا كانت القيمة المشار إليها فارغة، سيتم استخدام القيمة النصية ({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
إذا تعذّر إجراء أي من عمليات التعيين، سيتم بدلاً من ذلك تعيين القيمة "ErrorOnCopy" إلى متغيّر التدفق الوجهة.<AssignVariable>
<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>)
نسخ مَعلمات النموذج من الطلب المحدّد بواسطة سمة source لعنصر <Copy> إلى الطلب المحدّد بواسطة عنصر <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
المثال 2
يؤدي المثال التالي إلى نسخ جميع مَعلمات النموذج إلى الطلب المخصّص "MyCustomRequest":
<AssignMessage name="copy-formpara>ms-<2" Copy source>=&quo<t;request&q>uot<; > Fo<rmParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
يَنسخ المثال التالي ثلاث مَعلمات نموذج إلى الطلب المخصّص "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> فقط عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: ردّ
- أحد الإجراءَين التاليَين (أو كلاهما):
- بيانات النموذج: يتم ضبطها على قيمة معيّنة أو "" (السلسلة الفارغة). على سبيل المثال، مع
curl، أضِف-d ""إلى طلبك. - عنوان
Content-Length: اضبط القيمة على 0 (في حال عدم توفّر بيانات في الطلب الأصلي، وإلا استخدِم الطول الحالي). على سبيل المثال، يمكنك إضافةcurladd-H "Content-Length: 0"إلى طلبك.
- بيانات النموذج: يتم ضبطها على قيمة معيّنة أو "" (السلسلة الفارغة). على سبيل المثال، مع
عند نسخ <FormParams>، يضبط <Copy> Content-Type الرسالة على
"application/x-www-form-urlencoded" قبل إرسال الرسالة إلى الخدمة المستهدَفة.
<Headers> (عنصر ثانوي من <Copy>)
تنسخ هذه السياسة عناوين HTTP من رسالة الطلب أو الاستجابة المحدّدة بواسطة السمة source للعنصر <Copy> إلى رسالة الطلب أو الاستجابة المحدّدة بواسطة العنصر <AssignTo>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <Header> أو مصفوفة فارغة |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; >!-- Can al<so be a>n empty< array (Headers/) --> > Headers < H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header ... /Headers /Copy /AssignMessage
المثال 1
ينسخ المثال التالي العنوان user-agent من الطلب إلى عنصر الطلب المخصّص الجديد:
<AssignMessage name="copy-heade>rs-<1" Copy source>=&quo<t;reque>st"<; Headers Heade>r nam<e=">use<r-age>nt&<quot;/ /Headers /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
المثال 2
لنسخ جميع العناوين، استخدِم عنصر <Headers> فارغًا، كما يوضّح المثال التالي:
<AssignMessage name="copy-heade>rs-<2" Copy source>=&quo<t;reques>t&q<uot;<>/span> < Headers/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
إذا كانت هناك عدة عناوين تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-heade>rs-<3" Copy source>=&quo<t;reque>st"<; Headers > Head<er name="h1&>quot;/ < Header name=&>quot;<h2">/ < >Hea<der name="h3.2"/ /Headers /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
ينسخ هذا المثال "h1" و"h2" والقيمة الثانية من "h3". إذا كان "h3" يتضمّن قيمة واحدة فقط، لن يتم نسخها.
<Path> (عنصر ثانوي من <Copy>)
تحدِّد هذه السمة ما إذا كان يجب نسخ المسار من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الرد.
إذا كانت القيمة "true"، تنسخ هذه السياسة المسار من رسالة الطلب المحدّدة بواسطة السمة source للعنصر <Copy> إلى رسالة الطلب المحدّدة بواسطة العنصر <AssignTo>.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Path> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
Path>[false|true]/Path
/Copy
/AssignMessageالمثال 1
يوضّح المثال التالي أنّه يجب أن تنسخ سياسة AssignMessage المسار من طلب المصدر إلى عنصر الطلب المخصّص الجديد:
<AssignMessage name="copy-pa>th-<1" Copy source>=&quo<t;re>ques<t&quo>t; < P>ath<true/Path /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <Path> فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Payload> (عنصر ثانوي من <Copy>)
تحدِّد هذه السياسة ما إذا كان يجب نسخ الحمولة من المصدر إلى الوجهة. يمكن أن تكون المصدر والوجهة طلبات أو ردودًا.
إذا كانت القيمة "true"، تنسخ هذه السياسة الحمولة من الرسالة المحدّدة بواسطة السمة source للعنصر <Copy> إلى الرسالة المحدّدة بواسطة العنصر <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>)
تنسخ هذه السمة مَعلمات سلسلة طلب البحث من الطلب المحدّد بواسطة السمة source للعنصر <Copy> إلى الطلب المحدّد بواسطة العنصر <AssignTo>. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <QueryParam> أو مصفوفة فارغة |
| العنصر الأصل |
<QueryParam>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <QueryParams> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !-- >Can also b<e an empty >array (<QueryParams/) --> QueryPar>ams QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram ... /QueryParams /Copy /AssignMessage
المثال 1
يَنسخ المثال التالي مَعلمة طلب البحث "my_param" من الطلب إلى عنصر طلب مخصّص جديد:
<AssignMessage name="copy-querypara>ms-<1" Copy source>=&quo<t;request&q>uot; < QueryParams QueryPa>ram n<ame="my>_pa<ram&q>uot<;/ /QueryParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
المثال 2
ينسخ المثال التالي جميع مَعلمات طلب البحث من الطلب إلى عنصر طلب مخصّص جديد:
<AssignMessage name="copy-querypara>ms-<2" Copy source>=&quo<t;request&qu>ot;< >Que<ryParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
إذا كانت هناك مَعلمات طلب بحث متعددة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-querypara>ms-<3" Copy source>=&quo<t;request&q>uot; < QueryParams Qu>eryPara<m name="qp1">/ < QueryParam name="q>p2&qu<ot;/ Q>uer<yPara>m n<ame="qp3.2"/ /QueryParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
ينسخ هذا المثال "qp1" و"qp2" والقيمة الثانية من "qp3". إذا كانت السمة "qp3" تتضمّن قيمة واحدة فقط، لن يتم نسخها.
يمكنك استخدام <QueryParams> فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<ReasonPhrase> (عنصر ثانوي من <Copy>)
تحدّد هذه السمة ما إذا كان يجب نسخ عبارة السبب من استجابة المصدر إلى استجابة الوجهة. ليس لهذا العنصر أي تأثير في الطلب.
في حال ضبط القيمة على "صحيح"، تنسخ هذه السياسة ReasonPhrase من الردّ المحدّد بواسطة السمة source للعنصر <Copy> إلى الردّ المحدّد بواسطة العنصر <AssignTo>.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <ReasonPhrase> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce="[>request|resp<onse]"
> <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
/Copy
/AssignMessageالمثال 1
يضبط المثال التالي قيمة <ReasonPhrase> على true. مع توفّر العنصرين المصدر و<AssignTo> كما هو محدّد، يؤدي ذلك إلى أن تنسخ <Copy> عبارة السبب من رسالة الرد المحدّدة الاسم إلى العنصر response:
<AssignMessage name="AM-copy-reasonphra>se-<1" Copy source="serviceC>allou<tResponse&qu>ot; < ReasonPhr>ase<true/>Rea<sonPhras>e /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
يمكنك استخدام <ReasonPhrase> فقط عندما تكون رسائل المصدر والوجهة من النوع "ردّ".
<StatusCode> (عنصر ثانوي من <Copy>)
تحدِّد هذه السمة ما إذا كان سيتم نسخ رمز الحالة من استجابة المصدر إلى استجابة الوجهة. ليس لهذا العنصر أي تأثير في الطلب.
إذا كانت القيمة "true"، تنسخ هذه السياسة رمز الحالة من رسالة الرد المحدّدة بواسطة السمة source للعنصر <Copy> إلى رسالة الرد المحدّدة بواسطة العنصر <AssignTo>.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <StatusCode> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce=">;[request|re<sponse]&quo>t;
< S>t<atusCode[false>|true]/StatusCode
/Copy
/AssignMessageالمثال 1
يضبط المثال التالي قيمة <StatusCode> على "true"، ما يؤدي إلى نسخ رمز الحالة من عنصر الرد التلقائي إلى عنصر رد مخصّص جديد:
<AssignMessage name="copy-statusco>de-<1" Copy source=>"<;response&>quot<; Statu>sCo<detru>e/S<tatusCode /Copy AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo /AssignMessage
يمكنك استخدام <StatusCode> فقط عندما تكون رسائل المصدر والوجهة من النوع "ردّ".
من الاستخدامات الشائعة لـ <StatusCode> ضبط رمز حالة استجابة الخادم الوكيل على قيمة مختلفة عن القيمة التي تم تلقّيها من الهدف.
<Verb> (عنصر ثانوي من <Copy>)
تحدّد هذه السمة ما إذا كان سيتم نسخ فعل HTTP من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الرد.
إذا كانت القيمة "true"، يتم نسخ الفعل الذي تم العثور عليه في السمة source الخاصة بالعنصر <Copy> إلى الطلب المحدّد في العنصر <AssignTo>.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Verb> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
Verb>[false|true]/Verb
/Copy
/AssignMessageالمثال 1
يضبط المثال التالي <Verb> على "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>)
يحدّد ما إذا كان سيتم نسخ إصدار HTTP من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الرد.
إذا كانت القيمة "true"، يتم نسخ نسخة HTTP التي تم العثور عليها في السمة source الخاصة بالعنصر <Copy> إلى العنصر المحدّد بواسطة العنصر <AssignTo>.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Copy>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Version> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name"
Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
< Version[fa>lse|true]/Version
/Copy
/AssignMessageالمثال 1
يضبط المثال التالي قيمة <Version> على "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> مشترك بين جميع السياسات.
| القيمة التلقائية | timing fixed in amara |
| هل هو مطلوب؟ | اختياريّ. في حال حذف <DisplayName>، سيتم استخدام قيمة السمة name الخاصة بالسياسة. |
| النوع | سلسلة |
| العنصر الأصل | <PolicyElement> |
| العناصر الفرعية | بدون |
يستخدم العنصر <DisplayName> البنية التالية:
البنية
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
مثال
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
لا يحتوي العنصر <DisplayName> على أي سمات أو عناصر فرعية.
<IgnoreUnresolvedVariables>
تحدِّد ما إذا كانت المعالجة تتوقف عند مواجهة متغيّر لم يتم حله.
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<AssignMessage>
|
| العناصر الفرعية | بدون |
اضبط القيمة على true لتجاهل المتغيرات التي لم يتم حلّها ومواصلة المعالجة، وإلا
false. القيمة التلقائية هي false.
يختلف ضبط <IgnoreUnresolvedVariables> على true عن ضبط continueOnError <AssignMessage> على true لأنّه يخصّ ضبط قيم المتغيّرات والحصول عليها. إذا ضبطت continueOnError على true، سيتجاهل Edge جميع الأخطاء، وليس فقط الأخطاء التي تحدث عند استخدام المتغيرات.
يستخدم العنصر <IgnoreUnresolvedVariables> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me="policy_name">;
IgnoreUnre<solvedVariables[true|false>]<
/IgnoreUnre>solvedVariables
/AssignMessageالمثال 1
يضبط المثال التالي قيمة <IgnoreUnresolvedVariables> على "true":
<AssignMessage name="AM-Set-Hea>der<s&q>uot; < Set > Head<ers Header name=>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er > </Headers /Set IgnoreU>nresolv<edVariablestrue /IgnoreU>n<resolvedVariab>les /AssignMessage
بما أنّ قيمة <IgnoreUnresolvedVariables> هي true، إذا لم يتم تحديد المتغيّر possibly-defined-variable، لن تعرض هذه السياسة خطأً.
<Remove>
يزيل هذا الإجراء العناوين ومَعلمات طلبات البحث ومَعلمات النماذج و/أو حمولة الرسالة من الرسالة. يمكن أن تكون الرسالة طلبًا أو ردًا. تحدّد الرسالة التي تتأثر بالسمة <Remove>
باستخدام العنصر <AssignTo>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | نوع معقّد |
| العنصر الأصل |
<AssignMessage>
|
| العناصر الفرعية |
<FormParams><Headers><Payload><QueryParams> |
من حالات الاستخدام الشائعة لـ <Remove> حذف مَعلمة طلب بحث أو عنوان يحتوي على معلومات حساسة من عنصر الطلب الوارد، وذلك لتجنُّب تمريره إلى خادم الخلفية.
يستخدم العنصر <Remove> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam ... /Form<Params > !-- Can< also b>e an em<pty array (Headers/) --&g>t; Heade<rs > Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r < ... /Headers Payload[<false|true]/>Payload < !-- Can a>lso be <an empty array (QueryParams/) --&>gt; QueryPar<ams Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam ... /QueryParams /Remove /AssignMessage
المثال 1
يزيل المثال التالي نص الرسالة من الردّ:
<AssignMessage name="AM-remo>ve-<1" D>isplayNa<meremove-1/D>isp<layNam>e R<emove > P<ayloadtr>ue/<Payload> </Remove > Assign<Torespons>e</AssignTo /Ass>ignMessage
في مسار الاستجابة، تزيل هذه السياسة نص الاستجابة، ولا تعرض للعميل سوى عناوين HTTP.
المثال 2
يزيل المثال التالي جميع مَعلمات النموذج ومَعلمة طلب البحث من العنصر request:
<AssignMessage name="AM-remo>ve-<2">;
R<emove
!<-- Empty (F>ormParams/) removes all form par>amete<rs --
F>ormPa<rams/
Q>ueryPar<ams
QueryParam n>ame=&<quot;qp1&quo>t;/<
/Q>uer<yParams
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageالمثال 3
يزيل المثال التالي كل شيء من عنصر الرسالة:
<AssignMessage name="AM-remo>ve-<3"> <Remove/ > Assig<nToreques>t</AssignTo /Ass>ignMessage
عادةً، لا يتم ذلك إلا إذا كنت ستستخدم العنصر <Set> أو العنصر <Copy> لضبط بعض القيم البديلة في الرسالة.
<FormParams> (عنصر ثانوي من <Remove>)
تزيل هذه السمة مَعلمات النموذج المحدّدة من الطلب. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <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>)
تزيل هذه السياسة عناوين HTTP المحدّدة من الطلب أو الاستجابة، والتي يحدّدها العنصر <AssignTo>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <Header> أو مصفوفة فارغة |
| العنصر الأصل |
<Remove>
|
| العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can al>so be an e<mpty ar>ray (He<aders/) --> Header>s Head<er name>="header_n<ame">;he<ader_va>l<ue/Header > ... /Headers /Remove /AssignMessage
المثال 1
يزيل المثال التالي العنوان user-agent من الطلب:
<AssignMessage name="AM-remove-one-he>ade<r">;
R<emove
> Head<ers
Header name=&qu>ot;us<er-agent>&qu<ot;/
> /<Headers
> /Remo<ve
Assi>g<nTorequest/Ass>ignTo
/AssignMessageالمثال 2
يزيل المثال التالي جميع العناوين من الطلب:
<AssignMessage name="AM-remove-all-hea>der<s">; R<emove > H<eaders/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
المثال 3
إذا كانت هناك عدة عناوين تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="AM-remove-heade>rs-<3">;
R<emove
> Head<ers
Header >name=&q<uot;h1"/
> Head<er name="h2&qu>ot;/
< He>ade<r name=>&qu<ot;h3.2&>quot;/
< /Head>e<rs
/Remove
> AssignTorequest/AssignTo
/AssignMessageيزيل هذا المثال "h1" و"h2" والقيمة الثانية من "h3" من الطلب. إذا كان "h3" يتضمّن قيمة واحدة فقط، لن تتم إزالته.
<Payload> (عنصر ثانوي من <Remove>)
تحدِّد ما إذا كان <Remove> يحذف الحمولة في الطلب أو الرد، والتي يحدِّدها العنصر <AssignTo>. اضبط القيمة على "true" لمحو الحمولة، أو "false" بخلاف ذلك. القيمة التلقائية هي "false".
| القيمة التلقائية | خطأ |
| هل هو مطلوب؟ | اختياري |
| النوع | منطقي |
| العنصر الأصل |
<Remove>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Payload> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_na>me" <Remove > <Payload>[<false|true]/Pa>yload /Remove /AssignMessage
المثال 1
يضبط المثال التالي <Payload> على "true" ليتم محو حمولة الطلب:
<AssignMessage name="AM-remove-paylo>ad-<1">; R<emove > P<ayloadtr>ue/<Payload> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
<QueryParams> (عنصر ثانوي من <Remove>)
تزيل هذه السمة مَعلمات طلب البحث المحدّدة من الطلب. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <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> فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<Set>
تضبط هذه السمة المعلومات في رسالة الطلب أو الاستجابة، والتي يحدّدها العنصر <AssignTo>. تؤدي السمة <Set> إلى الكتابة فوق العناوين أو مَعلمات طلب البحث أو النموذج المتوفّرة في الرسالة الأصلية. قد تحتوي العناوين ومعلَمات طلب البحث والنماذج
في رسالة HTTP على قيم متعددة. لإضافة قيم إضافية لعنوان أو مَعلمة، استخدِم العنصر <Add> بدلاً من ذلك.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | نوع معقّد |
| العنصر الأصل |
<AssignMessage>
|
| العناصر الفرعية |
<FormParams><Headers><Payload><Path><QueryParams><ReasonPhrase><StatusCode><Verb><Version> |
يستخدم العنصر <Set> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am < ... /FormParams > Headers < Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader ... /Headers Pathpath/Path Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot; < variableSuffix="suffix&>quot;new_payload</Payload > QueryParams < QueryPa>ram n<ame="qu>eryparam_name"queryparam_<value/QueryPa>ram < ... > /QueryParams ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e < V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb Version[1.0|1.1|{variable}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي عنوانًا محدّدًا. عند إرفاق هذه السياسة في مسار الطلب، سيسمح ذلك للنظام المصدر بتلقّي عنوان إضافي لم يتم تضمينه في الطلب الوارد الأصلي.
<AssignMessage name="AM-Set-He>ade<r&q>uot;
< Set
> Header<s
Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
< /Heade>rs
/S<et
Assi>g<nTorequest/Ass>ignTo
/AssignMessageالمثال 2
يستبدل المثال التالي حمولة الاستجابة، بالإضافة إلى العنوان Content-Type.
<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot; < Set Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load /S>e<t AssignTore>sponse/AssignTo /AssignMessage
<FormParams> (عنصر ثانوي من <Set>)
تستبدل هذه السمة مَعلمات النموذج الحالية في الطلب بالقيم الجديدة التي تحدّدها. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <FormParam> |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_na>me"<;
Set
FormParams
F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
.>..
/FormParams
/Set
/AssignMessageالمثال 1
يضبط المثال التالي مَعلمة نموذج باسم "myparam" على قيمة المتغيّر request.header.myparam في طلب جديد ومخصّص:
<AssignMessage name="AM-set-formpara>ms-<1&q>uot; < Set >FormPar<ams FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m > /<FormParams /Set AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <FormParams> فقط عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: طلب
إذا حدّدت مَعلمات نموذج فارغة في سياستك (<Add><FormParams/></Add>)، لن تضيف السياسة أي مَعلمات نموذج. وهذا الإجراء مماثل لحذف <FormParams>.
تغيّر <Set> Content-Type الرسالة إلى
"application/x-www-form-urlencoded" قبل إرسالها إلى نقطة النهاية المستهدَفة.
<Headers> (عنصر ثانوي من <Set>)
تتم الكتابة فوق عناوين HTTP الحالية في الطلب أو الاستجابة، والتي يتم تحديدها من خلال العنصر <AssignTo>.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <Header> |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy>_name&q<uot;
Set
Headers
> Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
> ...
/Headers
/Set
/AssignMessageالمثال 1
يضبط المثال التالي العنوان x-ratelimit-remaining على قيمة المتغير ratelimit.Quota-1.available.count:
<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
< Set
> Head<ers
Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
< /Heade>rs
/Se<t
Assig>n<Toresponse/Ass>ignTo
/AssignMessageفي حال تحديد عناوين فارغة في سياستك (<Set><Headers/></Set>)، لن تضبط السياسة أي عناوين. سيكون لهذا الإجراء التأثير نفسه الذي يحدث عند حذف <Headers>.
<Path> (عنصر ثانوي من <Set>)
<Payload> (عنصر ثانوي من <Set>)
تحدّد هذه السمة نص الرسالة لطلب أو استجابة، ويتم تحديدها من خلال العنصر <AssignTo>. يمكن أن تكون الحمولة أي نوع محتوى صالح، مثل نص عادي أو JSON أو XML.
| القيمة التلقائية | سلسلة فارغة |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Payload> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name" Set Payload contentType="content_type" variablePrefix=>"prefi<x"<>/span> < > <variableSuffix>="suffix"new_payload/Payload /Set /AssignMessage
المثال 1
يضبط المثال التالي حمولة نصية عادية:
<AssignMessage name="set-paylo>ad-<1&q>uot; < Set Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload > /Set /AssignMessage
المثال 2
يضبط المثال التالي حمولة JSON:
<AssignMessage name="set-paylo>ad-<2&q>uot; < Set Payload contentType="ap>plication/json" {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"} /Payload /Set /AssignMessage
المثال 3
يدرج المثال التالي قيم المتغيرات في الحمولة عن طريق تضمين أسماء المتغيرات بين أقواس معقوفة:
<AssignMessage name="set-paylo>ad-<3&q>uot; < Set Payload contentType="ap>plication/json" {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"} /Payload /Set /AssignMessage
في الإصدارات السابقة من Apigee، لم يكن بإمكانك استخدام أقواس معقوفة للإشارة إلى مراجع المتغيرات ضمن حمولات JSON. في تلك الإصدارات، كان عليك استخدام السمتَين variablePrefix وvariableSuffix لتحديد أحرف الفواصل، واستخدامها لتضمين أسماء المتغيرات، على النحو التالي:
<AssignMessage name="set-payloa>d-3<b&q>uot; < Set Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"} /Payload /Set /AssignMessage
لا تزال هذه البنية القديمة تعمل.
المثال 4
يتم التعامل مع محتوى <Payload> كنموذج رسالة. وهذا يعني أنّ سياسة AssignMessage تستبدل المتغيّرات المضمّنة بين أقواس معقوفة بقيمة المتغيّرات المشار إليها في وقت التشغيل.
يستخدم المثال التالي بنية الأقواس المتعرّجة لضبط جزء من الحمولة على قيمة متغيّر:
<AssignMessage name="set-paylo>ad-<4&q>uot; < Set Payload contentType=>"t<ext/>xml"< > r<oot> <e1>sunday</e1> <e2>funday</e2> < e3{>var1}</e3 > /<root> < /Payload > /Set /AssignMessage
يوضّح الجدول التالي سمات النوع <Payload>:
| السمة | الوصف | التواجد في المنزل | النوع |
|---|---|---|---|
contentType |
في حال تحديدها، يتم تعيين قيمة |
اختياري | سلسلة |
variablePrefix |
تحدّد هذه السمة بشكل اختياري المحدّد الأوّل في متغيّر التدفق. القيمة التلقائية هي "{". لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيرات التدفق. | اختياري | Char |
variableSuffix |
تحدّد هذه السمة بشكل اختياري المحدّد اللاحق في متغيّر التدفق. القيمة التلقائية هي "}". لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيرات التدفق. | اختياري | Char |
<QueryParams> (عنصر ثانوي من <Set>)
تستبدل مَعلمات طلب البحث الحالية في الطلب بقيم جديدة. ليس لهذا العنصر أي تأثير على الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | مصفوفة من عناصر <QueryParam> |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams> البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> na<me=>"<;policy_nam>e"<
Set
QueryParams
Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
..>.
/QueryParams
/Set
/AssignMessageالمثال 1
يضبط المثال التالي مَعلمة طلب البحث "address" على قيمة المتغيّر request.header.address:
<AssignMessage name="AM-set-querypara>ms<-1&>quot;< Set Q>ueryPar<ams QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram< > </QueryParams > /Set /AssignMessage
يمكنك استخدام <QueryParams> فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
إذا حدّدت مَعلمات طلب بحث فارغة في سياستك (<Set><QueryParams/></Set>)، لن تضبط السياسة أي مَعلمات طلب بحث. وهذا الإجراء مماثل لحذف <QueryParams>.
<ReasonPhrase> (عنصر ثانوي من <Set>)
تضبط هذه السمة عبارة السبب في الردّ. يتم ذلك عادةً لتصحيح الأخطاء مع <StatusCode>. ليس لهذا العنصر أي تأثير في الطلب.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <ReasonPhrase> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name>" Set ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase /Set /AssignMessage
المثال 1
يحدّد المثال التالي عبارة سبب بسيطة:
<AssignMessage name="set-reasonphra>se-<1&q>uot; < Set Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase< /Set AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/ /AssignMessage
المثال 2
يتم التعامل مع محتوى <ReasonPhrase> كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر المحاط بأقواس معقوفة في وقت التشغيل بقيمة المتغيّر المشار إليه، كما يوضّح المثال التالي:
<AssignMessage name="AM-set-reasonphra>se-<2&q>uot;
< Set
Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageيمكنك استخدام <ReasonPhrase> فقط عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<StatusCode> (عنصر ثانوي من <Set>)
تضبط هذه السمة رمز الحالة في الردّ. ليس لهذا العنصر أي تأثير في الطلب.
| القيمة التلقائية | 200 (عند ضبط السمة createNew الخاصة بالعنصر <AssignTo> على "صحيح") |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة أو variable |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <StatusCode> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me" Set StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode /Set /AssignMessage
مثال 1
يضبط المثال التالي رمز حالة بسيطًا:
<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
< Set
>Sta<tusCode404/>Sta<tusC>ode<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageمثال 2
يتم التعامل مع محتوى <StatusCode> كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المشار إليه، كما يوضّح المثال التالي:
<AssignMessage name="set-statusco>de-<2&q>uot;
< Set
>StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
/Set
> Assign<Torespons>e</AssignTo
/Ass>ignMessageيمكنك استخدام <StatusCode> فقط عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<Verb> (عنصر ثانوي من <Set>)
تضبط هذه السمة فعل HTTP في الطلب. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة أو variable |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Verb> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;pol>icy_name" Set Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي فعلاً بسيطًا على الطلب:
<AssignMessage name="AM-set-ve>rb-<1&q>uot; < Se>t < Ver>bPO<ST/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
المثال 2
يتم التعامل مع محتوى <Verb> كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر المشار إليه.
يستخدم المثال التالي متغيّرًا لتعبئة فعل:
<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot; < Se>t Verb{my<_vari>abl<e}/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
يمكنك استخدام <Verb> فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Version> (عنصر ثانوي من <Set>)
تضبط هذه السمة إصدار HTTP في الطلب. ليس لهذا العنصر أي تأثير في الرد.
| القيمة التلقائية | لا تنطبق |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة أو variable |
| العنصر الأصل |
<Set>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Version> البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name" Set < Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي رقم الإصدار على "1.1":
<AssignMessage name="AM-set-versi>on-<1&q>uot; < Set > <Version1>.1/<Vers>io<n /Set /Ass>ignMessage
مثال 2
يستخدم ما يلي متغيّرًا بين قوسين معقوفين لضبط رقم الإصدار:
<AssignMessage name="AM-set-versi>on-<2&q>uot;
< Set
> Version{m<y_versio>n}/<Vers>ion<
/Set
> Assig<nToreques>t</AssignTo
/Ass>ignMessageيتم التعامل مع محتوى <Version> كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المرجعي.
يمكنك استخدام <Version> فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
إنشاء رسائل طلبات مخصّصة
يمكنك استخدام سياسة AssignMessage لإنشاء رسالة طلب مخصّصة. بعد إنشاء طلب مخصّص، يمكنك استخدامه بالطرق التالية:
- الوصول إلى متغيراته في سياسات أخرى
- تمريرها إلى خدمة خارجية
لإنشاء رسالة طلب مخصّصة، استخدِم العنصر <AssignTo> في سياسة AssignMessage. اضبط قيمة createNew على "true" وحدِّد اسم الرسالة الجديدة في نص العنصر، كما هو موضّح في المثال التالي:
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
لا يتّخذ Edge أي إجراء بشأن رسالة الطلب المخصّصة بشكل تلقائي. بعد إنشائه، سيواصل Edge تنفيذ الطلب الأصلي. لاستخدام الطلب المخصّص، أضِف سياسة، مثل سياسة ServiceCallout، إلى الخادم الوكيل الذي يمكنه تمرير الطلب المخصّص إلى خدمة خارجية.
تنشئ الأمثلة التالية رسائل طلب مخصّصة:
المثال 1
ينشئ المثال التالي عنصر طلب مخصّصًا باستخدام Assign Message:
<AssignMessage name="AssignMessa>ge-<3" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo Copy Headers > <Header n>ame<=&quo>t;u<ser>-agen<t"/ > /Head<ers /Copy Set Que>ryParams QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam /QueryParams > VerbG<ET/Verb /Set IgnoreUnr>e<solvedVariable>sfalse /IgnoreUnresolvedVariables /AssignMessage
في هذا المثال:
- تنشئ هذه السمة عنصر رسالة طلب جديدًا باسم "MyCustomRequest".
- في MyCustomRequest، تعمل هذه السياسة على:
- ينسخ قيمة عنوان HTTP
user-agentمن الطلب الوارد إلى الرسالة الجديدة. بما أنّ<Copy>يستخدم مرجعًا مطلقًا لمتغير التدفقuser-agent، ليس من الضروري تحديد السمةsourceلـ<Copy>. - تضبط هذه السمة مَعلمة طلب البحث
addressفي الرسالة المخصّصة على قيمة مَعلمة طلب البحثaddyفي الطلب الوارد. - تضبط هذه السمة فعل HTTP على
GET.
- ينسخ قيمة عنوان HTTP
- يضبط
<IgnoreUnresolvedVariables>على "false". عندما تكون قيمة<IgnoreUnresolvedVariables>هي "false"، إذا لم يكن أحد المتغيرات التي تحاول السياسة إضافتها متوفّرًا، سيتوقّف 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 |
| إزالة عناصر API باستخدام سياسة AssignMessage | يمكنك إزالة عناصر واجهة برمجة التطبيقات وتعديلها قبل وصولها إلى الخلفية المستهدَفة باستخدام سياسة AssignMessage. |
| إضافة عناصر واجهة برمجة التطبيقات وتحديدها باستخدام سياسة AssignMessage | تغيير طلب أو استجابة واجهة برمجة التطبيقات من خلال إضافة مَعلمات طلب البحث أو العناوين أو مَعلمات النموذج أو الحِملات باستخدام سياسة AssignMessage |
| إنشاء متغيّرات مخصّصة باستخدام سياسة AssignMessage | ضبط متغيرات المسار المخصّص باستخدام سياسة AssignMessage والاستفادة من المتغيرات في سياسات أخرى في خادم API الوكيل |
| إنشاء كائنات طلب أو رد جديدة باستخدام سياسة AssignMessage | إنشاء عناصر طلب أو استجابة جديدة لواجهة برمجة التطبيقات باستخدام سياسة AssignMessage في وقت تشغيل واجهة برمجة التطبيقات |
| إنشاء واجهة برمجة تطبيقات وهمية باستخدام سياسة AssignMessage | أنشئ واجهة برمجة تطبيقات REST وهمية بسيطة من خلال إضافة سياسة AssignMessage في مسار الرد. |
| ضبط الحمولة أو تعديلها باستخدام سياسة AssignMessage | تحويل طلب REST إلى طلب SOAP من خلال ضبط حمولة SOAP باستخدام سياسة AssignMessage في وقت تشغيل واجهة برمجة التطبيقات |
رموز الخطأ
يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تم ضبطها من خلال Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. من المهم معرفة هذه المعلومات إذا كنت تضع قواعد خطأ التعامل مع الأخطاء. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على ما تحتاج إلى معرفته حول أخطاء السياسة والتعامل مع المعالجة والأخطاء.
أخطاء بيئة التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
| رمز الخطأ | رموز حالة HTTP | السبب | إصلاح |
|---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | لم تتمكّن السياسة من ضبط متغيّر. اطّلِع على سلسلة الخطأ لاسم المتغير الذي لم يتم تحليله. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
يحدث هذا الخطأ في حال ضبط السمة تمثِّل متغيّرات نوع الرسالة طلبات واستجابات HTTP كاملة. شبكة Edge المدمجة
متغيرات التدفق |
build |
steps.assignmessage.UnresolvedVariable |
500 |
يحدث هذا الخطأ إذا كان المتغير المحدَّد في السياسة "تعيين رسالة" أيًا مما يلي:
|
build |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
| اسم الخطأ | السبب | إصلاح |
|---|---|---|
InvalidIndex |
إذا تم تحديد الفهرس في عنصرَي <Copy> و/أو <Remove> في "تعيين رسالة"
القيمة 0 أو رقم سالب، ثم يتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.
|
build |
InvalidVariableName |
إذا كان العنصر الفرعي <Name> فارغًا أو غير محدّد في العنصر <AssignVariable>،
فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات نظرًا لعدم وجود اسم متغير صالح
التي يجب تعيين قيمة لها. يجب إدخال اسم متغيّر صالح.
|
build |
InvalidPayload |
الحمولة المحددة في السياسة غير صالحة. |
متغيّرات الأخطاء
يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى ظهور خطأ في وقت التشغيل. لمزيد من المعلومات يمكنك الاطّلاع على ما تحتاج إلى معرفتها حول أخطاء السياسة.
| المتغيرات | المكان | مثال |
|---|---|---|
fault.name="fault_name" |
fault_name هو اسم الخطأ، كما هو موضَّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name هو الاسم الذي يحدّده المستخدم للسياسة التي أدّت إلى حدوث الخطأ. | assignmessage.AM-SetResponse.failed = true |
مثال على استجابة الخطأ
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
مثال على قاعدة الخطأ
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
المخططات
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.
مواضيع ذات صلة
تتوفّر عينات عملية لسياسة AssignMessage في عينات "منصّة واجهة برمجة التطبيقات".
للاطّلاع على مثال أكثر تقدّمًا حول كيفية تجاهل target.url من
ProxyEndpoint، يُرجى الاطّلاع على مقالة "منتدى Apigee" هذه.
للاطّلاع على "مسار مجموعة" أثناء التنفيذ في سياسة ServiceCallout، يمكنك الاطّلاع على مثال "التعلّم من خلال الممارسة" في نماذج Apigee على GitHub. ما عليك سوى استنساخ المستودع واتّباع التعليمات الواردة في هذا الموضوع. يستخدم المثال سياسة AssignMessage لضبط مسار الطلب، ثم يستخدم سياسة Service Callout لإرسال الطلب إلى خدمة خارجية.