أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المزايا
تغيّر سياسة assignMessage أو تنشئ رسائل طلبات وردّ جديدة أثناء تدفق الخادم الوكيل لواجهة برمجة التطبيقات. تسمح لك السياسة بتنفيذ الإجراءات التالية بشأن هذه الرسائل:
- إضافة مَعلمات نماذج أو عناوين أو مَعلمات طلب بحث جديدة إلى رسالة
- نسخ المواقع الحالية من رسالة إلى أخرى
- إزالة العناوين و/أو مَعلمات طلب البحث و/أو مَعلمات النماذج و/أو الرسائل الحمولات من رسالة
- ضبط قيمة المواقع الحالية في رسالة
باستخدام سياسة AssignMessage، يمكنك عادةً إضافة أو تغيير أو إزالة خصائص إما الطلب أو الاستجابة. ومع ذلك، يمكنك أيضًا استخدام سياسة AssignMessage لإنشاء رمز لطلب أو رسالة رد وتمريرها إلى هدف بديل، على النحو الموضح في إنشاء رسائل طلبات مخصَّصة
يمكن لسياسة AssignMessage إنشاء متغيّرات للتدفق أو تغييرها باستخدام العنصر الثانوي التالي. العناصر:
عنصر واحد (<AssignMessage>
)
تحدد سياسة AssignMessage.
القيمة التلقائية | يمكنك الاطّلاع على علامة التبويب السياسة التلقائية أدناه. |
هل هو مطلوب؟ | مطلوب |
النوع | عنصر معقد |
العنصر الرئيسي | timing fixed in amara |
العناصر الفرعية |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
يستخدم العنصر <AssignMessage>
الصيغة التالية:
البنية
يستخدم العنصر <AssignMessage>
الصيغة التالية:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
السياسة التلقائية
يُظهر المثال التالي الإعدادات التلقائية عند إضافة سياسة AssignMessage. إلى التدفق الخاص بك في واجهة مستخدم Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
عند إدراج سياسة assignMessage جديدة في واجهة مستخدم Edge، يحتوي النموذج على رموز بديلة لجميع
العمليات المحتملة. يمكنك عادةً اختيار العمليات التي تريد تنفيذها باستخدام هذه السياسة.
وتزيل باقي العناصر الفرعية. على سبيل المثال، إذا كنت تريد إجراء عملية نسخ، استخدِم العنصر
<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 continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2: إزالة الحمولة
يؤدي المثال التالي إلى حذف الحمولة من الاستجابة باستخدام <Remove>
العنصر:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3: تعديل الرد
يعدِّل المثال التالي كائن استجابة موجودًا من خلال إضافة عنوان إليه:
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
لا يؤدي هذا المثال إلى إنشاء رسالة جديدة. وإنما تعدِّل رسالة استجابة حالية عن طريق إضافة عنوان HTTP.
ولأن هذا المثال يحذف اسم متغيّر في العنصر <AssignTo>
، ويحدّد
type
كـ "response"، تعدّل هذه السياسة كائن الاستجابة الذي يعرضه الهدف.
الخادم.
يتم اشتقاق عنوان HTTP الذي تمت إضافته إلى رسالة الاستجابة من خلال هذه السياسة من متغير تتم تعبئته من خلال سياسة Lookupcache. لذلك تم تعديل رسالة الرد من خلال هذه تحتوي سياسة "تعيين الرسائل" على عنوان HTTP يشير إلى ما إذا كانت النتائج قد تم سحبها من ذاكرة التخزين المؤقت أم لا. يمكن أن يكون تعيين العناوين في الإجابة مفيدًا لتصحيح الأخطاء استكشاف الأخطاء وإصلاحها.
4. ضبط المحتوى الديناميكي
يمكنك استخدام "تعيين رسالة" لتضمين محتوى ديناميكي في حمولة الردود لطلب رسائل.
لتضمين متغيّرات تدفق Edge في حمولة بيانات بتنسيق XML، يمكنك إحاطة المتغيّر المحدَّد باستخدام curly
الأقواس المعقوفة، مثل هذا: {prefix.name}
.
يتضمّن المثال التالي قيمة متغيّر تدفق عنوان HTTP user-agent
.
في عنصر XML يسمى User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
بالنسبة إلى حمولات JSON، يمكنك إدراج المتغيّرات باستخدام السمة variablePrefix
variableSuffix
بأحرف محدِّدة كما هو موضح في ما يلي
مثال:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
للحصول على قائمة كاملة بمتغيّرات التدفق، يُرجى الاطّلاع على مرجع متغيّرات التدفق.
اعتبارًا من إصدار السحابة الإلكترونية 16.08.17، يمكنك أيضًا استخدام الأقواس المتعرجة لإدراج المتغيرات.
5: إزالة معلَمة طلب البحث
في ما يلي مثال على إزالة معلَمة طلب البحث apikey
من الطلب:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
من أفضل الممارسات إزالة مَعلمة طلب البحث apikey
من الطلب.
عند استخدام سياسةVerifyAPIKey لمصادقة المستخدم. يمكنك القيام بذلك لمنع
تمرير معلومات أساسية حساسة إلى الواجهة الخلفية.
6: ضبط/الحصول على المتغيرات
يستخدم المثال التالي ثلاث سياسات "تعيين الرسائل":
- تنشئ ثلاثة متغيرات تدفق في الطلب، بقيم ثابتة
- الحصول على متغيّرات التدفق ديناميكيًا في سياسة ثانية في مسار الطلب
- تضعها في حمولة الاستجابة
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
في السياسة الأولى، ينشئ العنصر <AssignVariable>
ثلاثة عناصر
والمتغيرات في الطلب. يحدّد كل عنصر <Name>
اسم متغيّر، ويحدّد <Value>
القيمة.
تستخدم السياسة الثانية عنصر <AssignVariable>
لقراءة القيم وتنشئ ثلاثة
المتغيرات الجديدة:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
وفي السياسة الثانية، يشير العنصر <Ref>
إلى متغيّر المصدر،
و<Name>
تحدد أسماء المتغيرات الجديدة. إذا كان المتغير
الذي يشير إليه العنصر <Ref>
، يمكنك استخدام القيمة
الذي يحدده العنصر <Value>
.
لتجربة هذه المجموعة من السياسات:
- أضِف السياستَين رقم 1 و2 إلى مسار الطلب. التأكد من وضع السياسة رقم 1 قبل السياسة رقم 2.
- أضِف السياسة الثالثة في مسار الردّ.
- تستخدم السياسة الثالثة عنصر
<Set>
لإضافة المتغيّرات إلى الردّ. تشير رسالة الأشكال البيانية ينشئ المثال التالي حمولة XML في الاستجابة التي يرجعها Edge إلى العميل:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
يُرجى العلم أنّ بنية الوصول إلى متغيّرات التدفق في
<Set>
هي التفافها في الأقواس المجعدة.تأكَّد من ضبط السمة
contentType
للعنصر<Payload>
على "application/xml". - إرسال طلب إلى الخادم الوكيل لواجهة برمجة التطبيقات على سبيل المثال:
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 continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
لإدراج جميع قيم العنوان، استخدِم المتغيّر التالي بدلاً من ذلك:
{calloutResponse.header.Set-Cookie.values}
ويتضمّن كل عنصر فرعي في هذا المرجع أمثلة إضافية. لمزيد من الأمثلة، راجِع مثال على AssignMessage على GitHub.
مرجع العنصر الثانوي
يصف هذا القسم العناصر الثانوية في <AssignMessage>
.
<Add>
إضافة معلومات إلى الطلب أو الاستجابة، والتي يتم تحديدها من خلال <AssignTo>
العنصر.
يضيف العنصر <Add>
خصائص جديدة إلى الرسالة غير الموجودة في الرسالة الأصلية
. لتغيير قيم المواقع الإلكترونية الحالية، استخدِم السمة <Set>
.
العنصر.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقد |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <QueryParams> |
يستخدم العنصر <Add>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
مثال 1
يستخدم المثال التالي العنصر <FormParams>
للحصول على قيم
ثلاث معلمات لسلسلة طلب البحث من الطلب الأولي وتعيينها كمعلمات في النموذج على
طلب نقطة النهاية المستهدفة:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
مثال 2
يستخدم المثال التالي العنصر <Headers>
لإضافة السمة
User-Agent
إلى طلب نقطة النهاية المستهدفة:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
مثال 3
يستخدم المثال التالي العنصر <QueryParams>
لإضافة طلب بحث واحد.
معلَمة ذات قيمة ثابتة للطلب:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
يستخدم هذا المثال <Add>
في التدفق المسبق للطلب. إذا ألقيت نظرة على النتائج في أداة
مثل أداة التتبع، أو طلب "http://http://httpbin.org/get" يصبح
"http://httpbin.org/get?myParam=42".
تتيح العناصر الفرعية في <Add>
استبدال السلسلة الديناميكي، والمعروف باسم
نماذج الرسائل:
<FormParams>
(تابع لـ <Add>
)
إضافة مَعلمات نموذج جديدة إلى رسالة الطلب ليس لهذا العنصر أي تأثير في الردّ. .
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> |
العنصر الرئيسي |
<Add>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
مثال 1
يضيف المثال التالي معلَمة نموذج واحدة ("answer") وقيمة ثابتة ("42") إلى الطلب:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
مثال 2
يحصل المثال التالي على قيمة معلَمة سلسلة طلب البحث name
إلى الطلب كمعلمة النموذج:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
يُرجى العلم أنّ هذا المثال لا يحدّد هدفًا مع <AssignTo>
. تضيف هذه السياسة
على الطلب فقط.
مثال 3
يضيف المثال التالي معلَمات نموذج متعددة إلى الطلب:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
يحصل هذا المثال على معلَمات سلسلة طلب البحث من الطلب الأصلي ويضيفها. كمعلمات للنموذج للطلب المرسل إلى نقطة النهاية المستهدفة.
يمكنك استخدام أداة التتبُّع للاطّلاع على التدفق. سيظهر لك نص الطلب يحتوي على بيانات النموذج المرمّزة بعنوان URL، والتي تم تمريرها في الأصل كسلسلة طلب بحث المَعلمات:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
لا يمكنك استخدام <FormParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: طلب
- أحد العناصر التالية (أو كليهما):
- بيانات النموذج: اضبط القيمة على قيمة معيّنة أو على "" (السلسلة الفارغة). على سبيل المثال، مع
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>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <Header> |
العنصر الرئيسي |
<Add>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
مثال 1
يضيف المثال التالي العنوان user-agent
إلى رسالة الطلب
لتعيين قيمة متغير تدفق request.user.agent
إلى ذلك العنوان.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(تابع لـ <Add>
)
تضيف مَعلمات طلب بحث جديدة إلى الطلب. ليس لهذا العنصر أي تأثير في الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> |
العنصر الرئيسي |
<Add>
|
العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
مثال 1
يضيف المثال التالي معلَمة طلب البحث "myParam" للطلب ويعيّن القيمة "42" إليه:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
لا يمكنك استخدام <QueryParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
وبالإضافة إلى ذلك، يمكنك ضبط معلَمات طلب البحث فقط عندما تكون قيمة<AssignTo>
السمة type
هي رسالة طلب. ولن يكون لوضعها في الردّ أي تأثير.
في حال تحديد مصفوفة فارغة من مَعلمات طلب البحث في سياستك
(<Add><QueryParams/></Add>
)، لا تضيف السياسة أي طلب.
المعلَمات. تمامًا مثل حذف <QueryParams>
.
<AssignTo>
يحدِّد هذا الإعداد الكائن الذي تعمل عليه سياسة AssignMessage. الخيارات هي:
- رسالة الطلب:
request
الذي استلمه الخادم الوكيل لواجهة برمجة التطبيقات - رسالة الردّ:
response
الذي يعرضه الخادم الهدف - رسالة مخصّصة: طلب مخصّص أو كائن استجابة
تجدر الإشارة إلى أنّه في بعض الحالات، لا يمكنك تغيير الكائن الذي تعمل عليه سياسة AssignMessage.
على سبيل المثال، لا يمكنك استخدام <Add>
أو <Set>
لإضافة مَعلمات طلب البحث أو تغييرها.
(<QueryParams>
) أو مَعلمات النموذج (<FormParams>
) في الردّ. يمكنك فقط
معالجة معلمات طلب البحث ومعلمات النموذج في الطلب.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية | لا ينطبق |
إذا لم يتم تحديد <AssignTo>
، سيتم تطبيق السياسة على الطلب أو الاستجابة التلقائية.
استنادًا إلى مكان تنفيذ السياسة في حال تنفيذ السياسة خلال مسار الطلب،
يؤثر في رسالة الطلب. إذا تم تنفيذها خلال عملية الردّ، ستؤثر السياسة في الردّ.
تلقائيًا.
يستخدم العنصر <AssignTo>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
مثال 1
يحدد المثال التالي أن الهدف هو الطلب الأصلي الذي سيتم إرساله إلى نقطة النهاية المستهدفة:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
من خلال ضبط createNew
على "خطأ" (الافتراضي)، لا ينشئ هذا المثال
طلب جديد. تؤثر جميع العمليات الواردة في هذه السياسة في الطلب الأصلي.
مثال 2
ينشئ المثال التالي كائن طلب جديدًا:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
عند إنشاء طلب أو كائن استجابة جديد، فإن العناصر الأخرى في سياسة AssignMessage
(مثل <Add>
و<Set>
و<Set>
)
عنصر الطلب.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في مسار العملية، أو إرسال العنصر الجديد طلب عنصر إلى خدمة خارجية باستخدام سياسة ServiceCallout.
مثال 3
ينشئ المثال التالي كائن طلب جديدًا باسم "MyRequestObject":
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
عند إنشاء طلب أو كائن استجابة جديد، فإن العناصر الأخرى في سياسة AssignMessage
(مثل <Add>
و<Set>
و<Set>
)
عنصر الطلب.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في مسار العملية، أو إرسال العنصر الجديد طلب عنصر إلى خدمة خارجية باستخدام سياسة ServiceCallout.
يوضّح الجدول التالي سمات <AssignTo>
:
السمة | الوصف | مطلوب؟ | النوع |
---|---|---|---|
createNew |
تحدِّد هذه السياسة ما إذا كانت هذه السياسة تنشئ رسالة جديدة عند تحديد القيم. إذا كانت القيمة "true"، ستنشئ السياسة متغيّرًا جديدًا من النوع
تم تحديدها بواسطة إذا كانت القيمة "false"، ستستجيب السياسة بإحدى الطريقتين التاليتين:
وإذا لم يتم تحديد
|
اختياري | منطقي |
transport |
تُحدِّد نوع نقل الطلب أو رسالة الردّ. والقيمة الافتراضية هي "http" (القيمة الوحيدة المسموح بها). |
اختياري | سلسلة |
type |
تُحدِّد نوع الرسالة الجديدة، عندما تكون قيمة createNew "true". صالحة
القيم هي "request" أو "الاستجابة".
القيمة التلقائية هي "الطلب". إذا لم تستخدم هذه السمة، سينشئ Edge أيًا مما يلي: طلب أو ردّ، حسب مسار تنفيذ هذه السياسة |
اختياري | سلسلة |
<AssignVariable>
تعيّن قيمة لمتغير تدفق وجهة (على سبيل المثال، متغير يتم تعيين قيمته بواسطة
سياسة assignMessage). في حال عدم توفّر متغيّر التدفق، سينشئ <AssignVariable>
بها.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقد |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية |
<Name> (مطلوب)<Ref> <Template> <Value> |
يمكن أن تكون القيمة التي تحدّدها لمتغيّر التدفق الوجهة واحدة مما يلي:
- سلسلة حرفية: استخدِم العنصر الثانوي
<Value>
لتحديد قيمة حرفية. سلسلة لمتغير التدفق الوجهة. - متغيّر التدفق: استخدام العنصر الثانوي
<Ref>
لتحديد قيمة متغير التدفق الحالي لمتغير تدفق الوجهة. للحصول على قائمة كاملة بالتدفق المتغيّرات التي يمكن استخدامها كمصدر، يُرجى الاطّلاع على مرجع متغيّرات التدفق. - نموذج الرسالة: استخدِم العنصر الفرعي
<Template>
لتحديد نموذج الرسالة الخاص متغير تدفق الوجهة.
يستخدم العنصر <AssignVariable>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
استخدِم العنصر <Ref>
لتحديد متغيّر المصدر. إذا كانت
لا يمكن الوصول إلى المتغيّر المشار إليه في <Ref>
، يستخدم Edge القيمة.
المحدد بواسطة العنصر <Value>
. إذا قمتَ بتحديد
<Template>
، تكون لها الأولوية على العناصر الفرعية الأخرى.
مثال 1
يُعيِّن المثال التالي قيمة المتغير الجديد، myvar
، على القيمة الحرفية
القيمة "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
مثال 2
يعيّن المثال التالي قيمة متغير التدفق
request.header.user-agent
إلى متغيّر مسار الوجهة myvar
وقيمة معلَمة طلب البحث country
إلى متغيّر التدفق الوجهة
Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
إذا تعذّر إتمام أي من عمليتَي التعيين، يعيّن Edge القيمة "ErrorOnCopy" بدلاً من ذلك إلى متغير تدفق الوجهة.
في حال عدم توفُّر متغيّرَي التدفق myvar
أو Country
،
يتم إنشاؤها بواسطة <AssignVariable>
.
مثال 3
يستخدم المثال التالي السمة <Template>
عنصر فرعي لتسلسل متغيري السياق
باستخدام سلسلة حرفية (واصلة) بينهما:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
من الاستخدامات الشائعة لـ <AssignVariable>
ضبط قيمة تلقائية لمعلَمة طلب بحث أو عنوان أو
أي قيمة أخرى يمكن تمريرها مع الطلب. ويمكنك إجراء ذلك من خلال مزيج من كل من
العنصران الفرعيان <Ref>
و<Value>
. لمزيد من المعلومات،
معلومات، يمكنك الاطّلاع على أمثلة عن <Ref>
.
<Name>
(تابع لـ <AssignVariable>
)
تُحدِّد اسم متغيّر التدفق الوجهة (على سبيل المثال، المتغيّر الذي تمّ ضبط قيمته على).
سياسة assignMessage). في حال عدم توفّر المتغيّر المسمى في <AssignVariable>
،
واحدة بهذا الاسم.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | مطلوب |
النوع | سلسلة |
العنصر الرئيسي |
<AssignVariable>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Name>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
مثال 1
يحدد المثال التالي المتغير الوجهة على أنه myvar
، ويضبطه
إلى القيمة الحرفية "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
إذا لم تتوفّر السمة myvar
، سينشئها <AssignVariable>
.
<Ref>
(تابع لـ <AssignVariable>
)
تحدِّد هذه السياسة مصدر المهمة كمتغيّر تدفق. يمكن أن يكون متغير التدفق أحد متغيّرات التدفق المحدّدة مسبقًا (كما هو موضّح في مرجع متغيّرات التدفق) أو متغيّر تدفق مخصّص التي قمت بإنشائها.
يتم دائمًا تفسير قيمة <Ref>
على أنها متغيّر تدفق؛ لا يمكنك
سلسلة حرفية
لتحديد قيمة سلسلة حرفية، استخدِم العنصر <Value>
.
بدلاً من ذلك.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<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]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
مثال 1
يعيّن المثال التالي قيمة متغير التدفق
request.header.user-agent
إلى متغير التدفق الوجهة myvar
قيمة معلَمة طلب البحث country
إلى المتغيّر Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
في هذا المثال، لا تتضمن Edge قيمة افتراضية (أو قيمة احتياطية) محددة لأي منهما مهمة معينة.
مثال 2
يحدّد المثال التالي قيمة متغيّر التدفق request.header.user-agent
إلى متغيّر التدفق الوجهة myvar
والقيمة
من معلمة طلب البحث country
إلى المتغير Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
في هذا المثال، إذا كانت قيم متغير التدفق request.header.user-agent
أو أن معلمة طلب البحث Country
فارغة أو غير قابلة للقراءة أو مكتوبة بشكل غير صحيح، يعيِّنها Edge
القيمة "ErrorOnCopy" للمتغيرات الجديدة.
مثال 3
من بين حالات الاستخدام الشائعة للدالة <AssignVariable>
ضبط القيمة التلقائية لطلب بحث
أو المعلمة أو العنوان أو أي قيمة أخرى يمكن تمريرها مع الطلب. على سبيل المثال، تقوم بإنشاء
خادم وكيل لواجهة برمجة تطبيقات الطقس حيث يأخذ الطلب معلَمة طلب بحث واحدة باسم "w". هذا النمط
على معرف المدينة التي تريد الطقس لها. يتضمن عنوان URL للطلب
النموذج:
http://myCO.com/v1/weather/forecastrss?w=city_ID
لتحديد قيمة افتراضية لـ "w"، يمكنك إنشاء سياسة AssignMessage مثل التالي:
<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3"> <AssignTo createNew="false" transport="http" type="request"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignVariable> <Name>request.queryparam.w</Name> <Ref>request.queryparam.w</Ref> <Value>12797282</Value> </AssignVariable> </AssignMessage>
في هذا المثال، تحصل <AssignVariable>
على القيمة request.queryparam.w
.
وتعيينه إلى نفسه. إذا كان متغير التدفق فارغًا، مما يعني أن "w" معلمة طلب البحث كانت
من الطلب، يستخدم هذا المثال القيمة الافتراضية من
العنصر <Value>
. لذلك، يمكنك طلب إعادة النظر في واجهة برمجة التطبيقات هذه.
خادم وكيل يحذف الحرف "w" معلمة طلب البحث:
http://myCO.com/v1/weather/forecastrss
...مع الإبقاء على عرض خادم وكيل واجهة برمجة التطبيقات نتيجة صالحة.
على عكس استخدام <Value>
، يجب أن تكون قيمة <Ref>
هي
أحد متغيّرات التدفق، مثل سمة request
أو response
أو
عنصر target
يمكن أن تكون القيمة أيضًا متغير تدفق مخصص قمت بإنشائه.
إذا حددت متغير تدفق غير موجود لقيمة <Ref>
،
وقيمة <IgnoreUnresolvedVariables>
هي "true"، تعرض Edge رسالة خطأ.
<Template>
(تابع لـ <AssignVariable>
)
تحدد نموذج الرسالة. رسالة يسمح لك باستبدال السلاسل المتغيرة عند تنفيذ السياسة، دمج السلاسل الحرفية مع أسماء المتغيرات الملتفة بشكل مجعد الأقواس. بالإضافة إلى ذلك، يمكن للرسائل دعم الدوال مثل الهروب وتحويل الحالة.
استخدِم السمة ref
لتحديد متغيّر تدفق، حيث تكون قيمة المتغيّر
هو نموذج رسالة. على سبيل المثال، يمكنك تخزين نموذج رسالة باعتباره
سمة مخصّصة
على تطبيق مطوِّر. عندما يحدِّد متصفّح Edge تطبيق المطوّر بعد أن يثبت صحة مفتاح واجهة برمجة التطبيقات.
أو رمز الأمان (من خلال سياسة إضافية)، <AssignVariable>
العنصر استخدام نموذج الرسالة من السمة المخصصة للتطبيق، وهي متاحة
كمتغير تدفق من سياسة الأمان. يفترض المثال التالي أن الرسالة
في سمة العميل باسم message_template
في
تطبيق مطوِّر البرامج الذي يطلب بيانات من واجهة برمجة التطبيقات، والذي تم فيه استخدام سياسة VerifyAPIKey للتحقق
مفتاح واجهة برمجة التطبيقات الخاص بالتطبيق:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<AssignVariable>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Template>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
مثال 1
يستخدم المثال التالي بنية نموذج الرسالة لتسلسل متغيرين للسياق باستخدام سلسلة حرفية (واصلة) بينهما:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
مثال 2
يحدد المثال التالي متغير التدفق، حيث تكون قيمة المتغير هو نموذج رسالة محدد مسبقًا. استخدم هذا الخيار إذا كنت تريد إدخال نموذج محدد مسبقًا في بيئة التشغيل بدون الحاجة إلى تعديل السياسة:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
مثال 3
يحدّد المثال التالي متغيّر تدفق وقيمة نصية. في هذه الحالة، إذا
فإن المتغير المشار إليه ليس فارغًا، ويتم استخدام هذه القيمة كقالب. إذا تمت الإشارة
القيمة فارغة، ثم القيمة النصية (في هذه الحالة، {system.uuid}-{messageid}
)
يستخدم كقالب. يفيد هذا النمط في "تجاوز" قيمة، حيث
تريد في بعض الحالات إلغاء النموذج الافتراضي (الجزء النصي) بالقيم
يتم تعيينها ديناميكيًا. على سبيل المثال، قد تحصل العبارة الشرطية على قيمة
من خريطة المفتاح/القيمة وتعيين المتغير المشار إليه على تلك القيمة:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(تابع لـ <AssignVariable>
)
تُحدِّد قيمة متغيّر التدفق الوجهة الذي تم ضبطه باستخدام <AssignVariable>
. تشير رسالة الأشكال البيانية
يتم تفسير القيمة دائمًا على أنها سلسلة حرفية؛ لا يمكنك استخدام متغير التدفق كقيمة، حتى
إذا تم التفاف القيمة بين قوسين ("{}"). لاستخدام متغيّر تدفق، استخدِم <Ref>
بدلاً من ذلك.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<AssignVariable>
|
العناصر الفرعية | لا ينطبق |
وعند استخدامها مع العنصر <Ref>
، يتم تضمين <Value>
.
يعمل كقيمة افتراضية (أو احتياطية). إذا لم يتم تحديد السمة <Ref>
، تكون
غير قابلة للتحليل أو فارغة، يتم استخدام قيمة <Value>
.
يستخدم العنصر <Value>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
مثال 1
يُعيِّن المثال التالي قيمة متغير تدفق الوجهة، myvar
،
إلى القيمة الحرفية "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
مثال 2
يعيّن المثال التالي قيمة متغير التدفق
request.header.user-agent
إلى متغيّر التدفق myvar
والقيمة
من معلمة طلب البحث country
إلى المتغير Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
في حال تعذّر تنفيذ أي منهما، يعيّن <AssignVariable>
بدلاً من ذلك القيمة "ErrorOnCopy" إلى
متغير تدفق الوجهة.
<Copy>
تنسخ القيم من الرسالة التي حدّدتها السمة source
.
إلى الرسالة التي يحدِّدها العنصر <AssignTo>
. إذا لم تحدد
أي استهداف مع <AssignTo>
، تنسخ هذه السياسة القيم إلى الطلب أو الاستجابة،
يعتمد ذلك على مسار تنفيذ هذه السياسة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
يستخدم العنصر <Copy>
الصيغة التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
مثال 1
ينسخ المثال التالي العنوان وثلاث معلمات نموذج والمسار وجميع طلبات البحث المعلَمات من الطلب إلى طلب مخصّص جديد:
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
يحتوي العنصر <Copy>
على السمات التالية:
السمة | الوصف | مطلوب؟ | النوع |
---|---|---|---|
المصدر |
تحدّد الكائن المصدر في النسخة.
|
اختياري | سلسلة |
<FormParams>
(تابع لـ <Copy>
)
تنسخ تفاصيل النموذج من الطلب المحدّد من خلال
السمة source
للعنصر <Copy>
إلى الطلب
المحدد بواسطة العنصر <AssignTo>
. ليس لهذا العنصر أي تأثير
الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> أو مصفوفة فارغة |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
مثال 1
ينسخ المثال التالي معلمة نموذج واحدة من الطلب إلى الطلب المخصص "MyCustomRequest":
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 2
ينسخ المثال التالي جميع معلمات النموذج إلى الطلب المخصص. "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 3
ينسخ المثال التالي ثلاث معلمات نموذج إلى الطلب المخصص "MyCustomRequest":
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 4
في حال وجود مَعلمات نموذج متعدّدة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
ينسخ هذا المثال "f1" و"f2" والقيمة الثانية "f3". إذا كان "f3" لديه واحدة فقط فلن يتم نسخها.
لا يمكنك استخدام <FormParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: ردّ
- أحد العناصر التالية (أو كليهما):
- بيانات النموذج: اضبط القيمة على قيمة معيّنة أو على "" (السلسلة الفارغة). على سبيل المثال، مع
curl
، يُرجى إضافة الرقم-d ""
إلى طلبك. - عنوان
Content-Length
: اضبط القيمة على 0 (إذا لم تكن هناك بيانات في الطلب الأصلي بخلاف ذلك، الطول الحالي. على سبيل المثال، معcurl
أضيفي-H "Content-Length: 0"
إلى طلبك.
- بيانات النموذج: اضبط القيمة على قيمة معيّنة أو على "" (السلسلة الفارغة). على سبيل المثال، مع
عند نسخ <FormParams>
، يضبط <Copy>
Content-Type
في الرسالة على
"application/x-www-form-urlencoded" قبل إرسال الرسالة إلى الخدمة المستهدفة.
<Headers>
(تابع لـ <Copy>
)
يتم نسخ عناوين HTTP من رسالة الطلب أو الاستجابة المحددة من قِبل
السمة source
للعنصر <Copy>
إلى الطلب
أو رسالة رد يحددها العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <Header> أو مصفوفة فارغة |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
مثال 1
ينسخ المثال التالي العنوان user-agent
من الطلب إلى
كائن طلب مخصّص جديد:
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 2
لنسخ جميع العناوين، استخدِم عنصر <Headers>
فارغًا، كما هو موضّح في المثال التالي.
:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 3
في حال وجود عدة عناوين تحمل الاسم نفسه، استخدِم الصيغة التالية:
<AssignMessage name="copy-headers-3"> <Copy source="request"> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
ينسخ هذا المثال "h1" و"h2" والقيمة الثانية "h3". إذا كانت "h3" لديه واحدة فقط فلن يتم نسخها.
<Path>
(تابع لـ <Copy>
)
تحدِّد هذه السياسة ما إذا كان يجب نسخ المسار من طلب المصدر إلى الوجهة. طلبك. ليس لهذا العنصر أي تأثير في الاستجابة.
في حال كانت القيمة "true"، تنسخ هذه السياسة المسار من رسالة الطلب المحدّدة من خلال
السمة source
للعنصر <Copy>
إلى الطلب
الرسالة التي يحددها العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Path>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
مثال 1
يشير المثال التالي إلى أنّ سياسة AssignMessage يجب أن تنسخ المسار من المصدر. طلب إلى كائن الطلب المخصص الجديد:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
لا يمكنك استخدام <Path>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Payload>
(تابع لـ <Copy>
)
تحدِّد هذه السياسة ما إذا كان يجب نسخ الحمولة من المصدر إلى الوجهة. يمكن أن يكون المصدر والوجهة طلبات أو ردودًا.
في حال كانت القيمة "true"، تنسخ هذه السياسة الحمولة من الرسالة التي يحدِّدها
السمة source
للعنصر <Copy>
إلى الرسالة
المحدد بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Payload>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
مثال 1
يضبط المثال التالي السمة <Payload>
على "true" بحيث تصبح حمولة الطلب
تم نسخه من الطلب إلى الرد:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(تابع لـ <Copy>
)
تنسخ مَعلمات سلسلة طلب البحث من الطلب الذي تحدِّده السمة.
السمة source
للعنصر <Copy>
إلى الطلب المحدد
بواسطة العنصر <AssignTo>
. ليس لهذا العنصر أي تأثير في الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> أو مصفوفة فارغة |
العنصر الرئيسي |
<QueryParam>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <QueryParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
مثال 1
ينسخ المثال التالي "my_param" معلَمة طلب بحث من الطلب إلى معلمة جديدة كائن الطلب المخصص:
<AssignMessage name="copy-queryparams-1"> <Copy source="request"> <QueryParams> <QueryParam name="my_param"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 2
ينسخ المثال التالي جميع معلَمات طلب البحث من الطلب إلى ملف كائن الطلب:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
مثال 3
في حال وجود مَعلمات طلب بحث متعددة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
ينسخ هذا المثال "qp1" و"qp2" والقيمة الثانية "qp3". إذا كانت قيمة "qp3" لها فقط قيمة واحدة، ثم لا يتم نسخها.
لا يمكنك استخدام <QueryParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<ReasonPhrase>
(تابع لـ <Copy>
)
تحدد ما إذا كان يجب نسخ عبارة السبب من رد المصدر إلى الاستجابة المقصودة. ليس لهذا العنصر أي تأثير في الطلب.
إذا كانت القيمة "true"، تنسخ هذه السياسة ReasonPhrase
من الرد.
التي تحددها السمة source
للعنصر <Copy>
إلى الاستجابة
المحدد في العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <ReasonPhrase>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
مثال 1
يضبط المثال التالي السمة <ReasonPhrase>
على "صحيح"، ما يؤدي إلى حدوث <Copy>
.
لنسخ عبارة السبب من الاستجابة التلقائية إلى كائن استجابة مخصّص:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
لا يمكنك استخدام <ReasonPhrase>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<StatusCode>
(تابع لـ <Copy>
)
تحديد ما إذا كان قد تم نسخ رمز الحالة من استجابة المصدر إلى الوجهة الاستجابة. ليس لهذا العنصر أي تأثير في الطلب.
إذا كانت القيمة "true"، تنسخ هذه السياسة رمز الحالة من رسالة الرد المحددة من خلال
السمة source
للعنصر <Copy>
إلى الاستجابة
الرسالة التي يحددها العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <StatusCode>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
مثال 1
يؤدي المثال التالي إلى ضبط <StatusCode>
على "صحيح"، وبالتالي نسخ رمز الحالة.
من كائن الاستجابة التلقائي إلى كائن استجابة مخصص جديد:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
لا يمكنك استخدام <StatusCode>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
من الاستخدامات الشائعة لـ <StatusCode>
التأكد من أن استجابة الخادم الوكيل لها الحالة نفسها.
كالرد الذي تم تلقّيه من الاستهداف عند استخدام createNew
الخاص بـ <AssignTo>
على "true".
<Verb>
(تابع لـ <Copy>
)
تحدِّد هذه السياسة ما إذا كان الفعل HTTP قد تم نسخه من طلب المصدر إلى الوجهة. طلبك. ليس لهذا العنصر أي تأثير في الاستجابة.
إذا كانت القيمة "true"، يتم نسخ الفعل المتوفّر في السمة source
للعنصر <Copy>
للطلب المحدد في العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Verb>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
مثال 1
يقوم المثال التالي بتعيين <Verb>
على "true"، والذي ينسخ الفعل من
طلب تلقائي إلى طلب جديد مخصص:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
لا يمكنك استخدام <Verb>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Version>
(تابع لـ <Copy>
)
تحدِّد هذه السياسة ما إذا كان قد تم نسخ إصدار HTTP من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الاستجابة.
إذا كانت القيمة "true"، يتم نسخ نسخة HTTP المتوفّرة في السمة source
للعنصر <Copy>
إلى الكائن الذي يحدده العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Copy>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Version>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
مثال 1
يضبط المثال التالي السمة <Version>
على "true" في الطلب، والتي تنسخ
نسخة من كائن الطلب التلقائي إلى كائن طلب مخصص جديد:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
لا يمكنك استخدام <Version>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<DisplayName>
استخدِمه مع السمة name
لتصنيف السياسة في
لإدارة الخادم الوكيل لواجهة المستخدم باستخدام اسم مختلف وطبيعي أكثر.
يُعدّ العنصر <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
إلى true
لـ <AssignMessage>
من حيث إنها خاصة
تحديد المتغيرات والحصول عليها. إذا ضبطت continueOnError
على
true
، ثم يتجاهل Edge جميع الأخطاء، وليس فقط الأخطاء التي تحدث عند استخدام
المتغيرات.
يستخدم العنصر <IgnoreUnresolvedVariables>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
مثال 1
يحدّد المثال التالي القيمة "صحيح" للسمة <IgnoreUnresolvedVariables>
:
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
يزيل العناوين و/أو مَعلمات طلب البحث و/أو مَعلمات النماذج و/أو حمولة الرسالة من
رسالة. يمكن أن تكون الرسالة طلبًا أو ردًا. عليك تحديد الرسالة التي <Remove>
.
الفريق باستخدام العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقد |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Payload> <QueryParams> |
من بين حالات الاستخدام الشائعة لـ <Remove>
حذف معلَمة طلب بحث تحتوي على بيانات حساسة.
المعلومات من كائن الطلب الوارد، وذلك لتجنب تمريرها إلى خادم الخلفية.
يستخدم العنصر <Remove>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
مثال 1
يؤدي المثال التالي إلى إزالة نص الرسالة من الاستجابة:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
خلال عملية الاستجابة، تزيل هذه السياسة نص الاستجابة مع عرض HTTP فقط عناوينه إلى العميل.
مثال 2
يزيل المثال التالي جميع معلمات النموذج ومعلمة طلب البحث من المعلمة الواردة الطلب:
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(تابع لـ <Remove>
)
إزالة معلَمات النموذج المحدّدة من الطلب ليس لهذا العنصر أي تأثير الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> أو مصفوفة فارغة |
العنصر الرئيسي |
<Remove>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
مثال 1
في ما يلي مثال يزيل ثلاث مَعلمات من الطلب:
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
مثال 2
في ما يلي مثال يزيل جميع مَعلمات النموذج من الطلب:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
مثال 3
في حال وجود مَعلمات نموذج متعدّدة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
يؤدي هذا المثال إلى إزالة "f1" و"f2" والقيمة الثانية "f3". إذا كان "f3" لديه واحدة فقط فلن تتم إزالتها.
لا يمكنك استخدام <FormParams>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
Content-Type
: "application/x-www-form-urlencrypt"
<Headers>
(تابع لـ <Remove>
)
إزالة عناوين HTTP المحددة من الطلب أو الاستجابة، والتي يتم تحديدها بواسطة
العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <Header> أو مصفوفة فارغة |
العنصر الرئيسي |
<Remove>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
مثال 1
في ما يلي مثال يزيل العنوان user-agent
من الطلب:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
مثال 2
يزيل المثال التالي جميع العناوين من الطلب:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
مثال 3
في حال وجود عدة عناوين تحمل الاسم نفسه، استخدِم الصيغة التالية:
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
يزيل هذا المثال "h1" و"h2" والقيمة الثانية "h3" من الطلب. إذا كانت "h3" لها قيمة واحدة فقط، فلن تتم إزالتها.
<Payload>
(تابع لـ <Remove>
)
تحدِّد هذه السياسة ما إذا كان <Remove>
يحذف الحمولة في الطلب أو الاستجابة.
المحدد بواسطة العنصر <AssignTo>
. ضبط على "صحيح" إلى
ومحو الحمولة وإلا "خطأ". القيمة التلقائية هي "خطأ".
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Remove>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Payload>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
مثال 1
يضبط المثال التالي السمة <Payload>
على "true" بحيث تصبح حمولة الطلب
تم محوها:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(تابع لـ <Remove>
)
إزالة معلَمات طلب البحث المحدّدة من الطلب ليس لهذا العنصر أي تأثير الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> أو مصفوفة فارغة |
العنصر الرئيسي |
<Remove>
|
العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
مثال 1
في ما يلي مثال على إزالة معلمة طلب بحث واحدة من الطلب:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
مثال 2
في المثال التالي، يمكن إزالة جميع مَعلمات طلب البحث من الطلب:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
مثال 3
في حال وجود مَعلمات طلب بحث متعددة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
يؤدي هذا المثال إلى إزالة "qp1" و"qp2" والقيمة الثانية "qp3" من الطلب. في حال حذف "qp3" لها قيمة واحدة فقط، فلن تتم إزالتها.
مثال 4
في ما يلي مثال على إزالة معلَمة طلب البحث apikey
من الطلب:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
لا يمكنك استخدام <QueryParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<Set>
تعمل هذه السياسة على ضبط المعلومات في الطلب أو رسالة الاستجابة، والتي يتم تحديدها بواسطة
العنصر <AssignTo>
. يستبدل <Set>
العناوين أو
الموجودة بالفعل في الرسالة الأصلية. لإنشاء رأس أو معلمة جديدة، استخدم
العنصر <Add>
بدلاً من ذلك.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقد |
العنصر الرئيسي |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
يستخدم العنصر <Set>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
مثال 1
يوضّح المثال التالي العنصر <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(تابع لـ <Set>
)
استبدال مَعلمات النموذج الحالية في أحد الطلبات واستبدالها بالقيم الجديدة التي التحديد باستخدام هذا العنصر. ليس لهذا العنصر أي تأثير في الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
مثال 1
يحدّد المثال التالي مَعلمة نموذج تُسمى "myparam" لقيمة
متغيّر request.header.myparam
في طلب مخصّص جديد:
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
لا يمكنك استخدام <FormParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: طلب
في حال تحديد مَعلمات نموذج فارغة في السياسة
(<Add><FormParams/></Add>
)، لا تضيف السياسة أي نموذج.
المعلَمات. ويشبه هذا الإجراء حذف <FormParams>
.
<Set>
يغيِّر Content-Type
للرسالة إلى
"application/x-www-form-urlencoded" قبل إرساله إلى نقطة النهاية المستهدفة.
<Headers>
(تابع لـ <Set>
)
استبدال عناوين HTTP الحالية في الطلب أو الاستجابة، والتي يتم تحديدها بواسطة
العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <Header> |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
مثال 1
يحدّد المثال التالي عنوان user-agent
على قيمة
متغيّر request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
في حال تحديد عناوين فارغة في السياسة
(<Add><Headers/></Add>
)، لا تضيف السياسة أي عناوين. هذا النمط
تساوي عملية حذف <Headers>
.
<Path>
(تابع لـ <Set>
)
<Payload>
(تابع لـ <Set>
)
تحدد نص الرسالة لطلب أو استجابة، والتي يتم تحديدها بواسطة
العنصر <AssignTo>
. يمكن أن تكون الحمولة أي نوع محتوى صالح، مثل العادي
بنص أو JSON أو XML.
القيمة التلقائية | سلسلة فارغة |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Payload>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
مثال 1
يحدد المثال التالي حمولة بنص عادي:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
مثال 2
يحدّد المثال التالي حمولة JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
مثال 3
يُدرج المثال التالي قيمًا متغيرة في الحمولة من خلال إحاطة أسماء المتغيرات في الأقواس المعقوفة:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
في الإصدارات الأقدم من Apigee Edge - على سبيل المثال، قبل الإصدار 16.08.17 من إصدار السحابة الإلكترونية - يمكنك إجراء
عدم استخدام الأقواس المعقوفة للدلالة على المراجع المتغيرة ضمن حمولات JSON. في تلك الإصدارات،
لاستخدام السمتَين variablePrefix
وvariableSuffix
من أجل
وتحديد أحرف المحدِّد، واستخدامها لتضمين أسماء المتغيرات، كما يلي:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
لا تزال بناء الجملة القديم يعمل.
مثال 4
يتم التعامل مع محتوى "<Payload>
" كنموذج رسالة. وهذا يعني أن
تستبدل سياسة assignMessage المتغيرات التي يتم وضعها في أقواس معقوفة بقيمة السمة
المتغيرات المشار إليها في وقت التشغيل.
يستخدم المثال التالي بناء جملة الأقواس المعقوفة لتعيين جزء من الحمولة قيمة المتغير:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
يوضّح الجدول التالي سمات <Payload>
:
السمة | الوصف | التواجد في المنزل | النوع |
---|---|---|---|
contentType |
وفي حال تحديد قيمة، يتم تعيين قيمة |
اختياري | سلسلة |
variablePrefix |
تحدد هذه السمة المحدِّد الرئيسي في متغيّر التدفق بشكل اختياري. يتم ضبط الإعدادات التلقائية على "{". بالنسبة مزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق. | اختياري | شار |
variableSuffix |
تحديد المحدِّد اللاحق على متغيّر التدفق بشكل اختياري وتكون القيمة التلقائية هي "}". بالنسبة مزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق. | اختياري | شار |
<QueryParams>
(تابع لـ <Set>
)
استبدال معلَمات طلب البحث الحالية في الطلب بقيم جديدة ليس لهذا العنصر أي تأثير. في الرد.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
مثال 1
يعين المثال التالي "address" معامل البحث إلى قيمة
متغيّر request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
لا يمكنك استخدام <QueryParams>
إلا عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
في حال تحديد مَعلمات طلب بحث فارغة في السياسة
(<Set><QueryParams/></Set>
)، لا تضبط السياسة أي طلب.
المعلَمات. تمامًا مثل حذف <QueryParams>
.
<ReasonPhrase>
(تابع لـ <Set>
)
لضبط عبارة السبب في الردّ يتم ذلك عادةً لتصحيح الأخطاء بالإضافة إلى
<StatusCode>
ليس لهذا العنصر أي تأثير في الطلب.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <ReasonPhrase>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
مثال 1
يحدّد المثال التالي عبارة سبب بسيطة:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
مثال 2
يتم التعامل مع محتوى "<ReasonPhrase>
" كنموذج رسالة. يعني ذلك
سيتم استبدال اسم المتغير الملفوف بين قوسين معقوفين في وقت التشغيل بقيمة
المتغير المشار إليه، كما يوضح المثال التالي:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
لا يمكنك استخدام <ReasonPhrase>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<StatusCode>
(تابع لـ <Set>
)
لضبط رمز الحالة في الردّ. ليس لهذا العنصر أي تأثير في الطلب.
القيمة التلقائية | "200" (عند استخدام سمة createNew في <AssignTo>
على "true") |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <StatusCode>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
مثال 1
ويحدّد المثال التالي رمز حالة بسيطًا:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
مثال 2
يتم التعامل مع محتوى "<StatusCode>
" كنموذج رسالة. هذا يعني
سيتم استبدال اسم المتغير الملفوف بين قوسين معقوفين في وقت التشغيل بقيمة
المتغير المشار إليه، كما يوضح المثال التالي:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
لا يمكنك استخدام <StatusCode>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<Verb>
(تابع لـ <Set>
)
لضبط فعل HTTP على الطلب. ليس لهذا العنصر أي تأثير في الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Verb>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
مثال 1
يحدّد المثال التالي فعلاً بسيطًا في الطلب:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
مثال 2
يتم التعامل مع محتوى "<Verb>
" كنموذج رسالة. هذا يعني أن اسم المتغير
سيتم استبدال المعقوفات المعقوفة في وقت التشغيل بقيمة المتغير المشار إليه
المتغير.
يستخدم المثال التالي متغيرًا لتعبئة فعل:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
لا يمكنك استخدام <Verb>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Version>
(تابع لـ <Set>
)
تحدِّد هذه السياسة إصدار HTTP على طلب معيّن. ليس لهذا العنصر أي تأثير في الاستجابة.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الرئيسي |
<Set>
|
العناصر الفرعية | لا ينطبق |
يستخدم العنصر <Version>
الصيغة التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
مثال 1
يضبط المثال التالي رقم الإصدار على "1.1":
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
مثال 2
يستخدم ما يلي متغيرًا في الأقواس المعقوفة لتعيين رقم الإصدار:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
يتم التعامل مع محتوى "<Version>
" كنموذج رسالة. هذا يعني
سيتم استبدال اسم المتغير الملفوف بين قوسين معقوفين في وقت التشغيل بقيمة المتغير المشار إليه
المتغير.
لا يمكنك استخدام <Version>
إلا عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
إنشاء رسائل طلبات مخصّصة
يمكنك استخدام سياسة AssignMessage لإنشاء رسالة طلب مخصّصة. بعد إنشاء ملف شخصي مخصّص المستخدم، يمكنك استخدامه بالطرق التالية:
- الوصول إلى متغيراته في السياسات الأخرى
- تمريره إلى خدمة خارجية
لإنشاء رسالة طلب مخصّصة، يمكنك استخدام العنصر <AssignTo>
في سياسة AssignMessage.
. ضبط createNew
على "صحيح" وتحديد اسم الرسالة الجديدة في نصها
من العنصر، كما يوضح المثال التالي:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
بشكل تلقائي، لا يفعل Edge أي شيء مع رسالة الطلب المخصصة. بعد إنشائه، سيضيف Edge الاستمرار في التدفق مع الطلب الأصلي. لاستخدام الطلب المخصّص، أضِف سياسة مثل هي سياسة ServiceCallout في الخادم الوكيل الذي يمكنه تمرير الطلب المخصّص إلى خادم خدمة ما.
تنشئ الأمثلة التالية رسائل طلبات مخصّصة:
مثال 1
ينشئ المثال التالي كائن طلب مخصّصًا باستخدام "تعيين رسالة":
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
هذا المثال:
- ينشئ كائن رسالة طلب جديدًا باسم "MyCustomRequest".
- في MyCustomRequest، تعمل هذه السياسة على:
- يتم نسخ قيمة عنوان HTTP
user-agent
من الرسالة الواردة. إلى الرسالة الجديدة. ولأنّ<Copy>
تستخدم إشارة مطلقة إلى متغير التدفقuser-agent
، لا يوجد يجب تحديد السمةsource
إلى<Copy>
. - تضبط مَعلمة طلب البحث
address
في الرسالة المخصّصة على قيمة معلمة طلب البحثaddy
للطلب الوارد. - لضبط فعل HTTP على
GET
.
- يتم نسخ قيمة عنوان HTTP
- يتم ضبط السمة
<IgnoreUnresolvedVariables>
على "خطأ". عندما<IgnoreUnresolvedVariables>
"false"، إذا كان أحد المتغيرات التي تحاول السياسة إضافتها غير موجود، فستتوقف Edge المعالجة في تدفق واجهة برمجة التطبيقات.
مثال 2
في ما يلي مثال آخر يوضّح كيفية إنشاء عنصر طلب مخصّص باستخدام الخيار "تعيين". الرسالة:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
ينشئ هذا المثال طلبًا مخصّصًا جديدًا باسم "partner.request". ثم تحدد
<Verb>
و<Payload>
في الطلب الجديد
يمكنك الوصول إلى رسالة طلب مخصصة في سياسة AssignMessage أخرى تحدث لاحقًا في
التدفق. يحصل المثال التالي على قيمة قيمة السمة
عنوان user-agent
:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
الفيديوهات
لمعرفة المزيد من المعلومات حول سياسة assignMessage، يمكنك مشاهدة الفيديوهات التالية.
فيديو | الوصف |
---|---|
أسباب التعيين سياسة الرسائل؟ | تعرَّف على مزايا استخدام سياسة AssignMessage لتعديل طلب البيانات من واجهة برمجة التطبيقات أو بدون تعديل رمز الواجهة الخلفية. |
نسخ عناصر واجهة برمجة التطبيقات باستخدام سياسة AssignMessage | نسخ العناصر من طلب أو ردّ من واجهة برمجة التطبيقات وإنشاء طلب أو ردّ جديدَين باستخدام سياسة AssignMessage. |
إزالة واجهة برمجة التطبيقات العناصر باستخدام سياسة AssignMessage | يجب إزالة عناصر واجهة برمجة التطبيقات وتعديل واجهة برمجة التطبيقات قبل وصولها إلى الواجهة الخلفية المستهدفة باستخدام واجهة سياسة assignMessage. |
إضافة وضبط واجهة برمجة التطبيقات العناصر باستخدام سياسة AssignMessage | تغيير طلب أو استجابة من واجهة برمجة التطبيقات عن طريق إضافة مَعلمات طلب البحث أو العناوين أو مَعلمات النماذج الحمولات باستخدام سياسة AssignMessage. |
إنشاء خيار مخصّص المتغيرات باستخدام سياسة AssignMessage | يمكنك تحديد متغيّرات التدفق المخصّصة باستخدام سياسة AssignMessage والاستفادة من المتغيّرات في السياسات الأخرى في الخادم الوكيل لواجهة برمجة التطبيقات. |
إنشاء تصنيف جديد عناصر الطلب أو الرد باستخدام سياسة AssignMessage | إنشاء عناصر جديدة لطلب البيانات من واجهة برمجة التطبيقات أو الرد عليها باستخدام سياسة AssignMessage على واجهة برمجة التطبيقات وقت التشغيل. |
إنشاء واجهة برمجة تطبيقات وهمية باستخدام سياسة AssignMessage | إنشاء نموذج REST API بسيط عن طريق إضافة سياسة 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="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
المخططات
يتم تحديد كل نوع سياسة من خلال مخطّط XML (.xsd
). يمكنك الرجوع إلى مخططات السياسات
المتوفرة على جيت هب.
مواضيع ذات صلة
العمل تتوفّر نماذج من سياسة AssignMessage في نماذج النظام الأساسي لواجهة برمجة التطبيقات.
للاطّلاع على مثال أكثر تقدّمًا حول كيفية إلغاء target.url
من
ProxyEndpoint، يُرجى الاطّلاع على مقالة منتدى Apigee هذه.
لرؤية "تعيين مسار" قيد التطبيق في سياسة ServiceCallout، يمكنك الاطّلاع على مقالة التعلّم من خلال تنفيذ مثال في نماذج Apigee GitHub. ما عليك سوى استنساخ المستودع اتبع التعليمات الواردة في هذا الموضوع. يستخدم المثال سياسة AssignMessage لضبط مسار الطلب، بعد ذلك سياسة وسيلة شرح الخدمة لتقديم الطلب إلى خدمة خارجية.