أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
ما هي الإعلانات الترويجية؟
تغيّر سياسة 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
على أنّه "استجابة"، تعدّل هذه السياسة عنصر الاستجابة الذي يعرضه الخادم المستهدف.
يتم استخلاص عنوان HTTP الذي تضيفه هذه السياسة إلى رسالة الاستجابة من متغيّر تتم تعبئته بواسطة سياسة LookupCache. لذلك، تحتوي رسالة الردّ المعدَّلة بموجب سياسة "تعيين الرسالة" على عنوان HTTP يشير إلى ما إذا كان قد تم استرداد النتائج من ذاكرة التخزين المؤقت أم لا. يمكن أن يكون ضبط العناوين في الرد مفيدًا لتصحيح الأخطاء وتحديد المشاكل وحلّها.
4: ضبط المحتوى الديناميكي
يمكنك استخدام Assign Message لتضمين محتوى ديناميكي في حمولة رسائل الطلبات والردود.
لتضمين متغيرات تدفق Edge في حمولة XML، ضَع المتغير المحدّد بين قوسين معقوفين، على النحو التالي: {prefix.name}
.
يضمّن المثال التالي قيمة متغيّر تدفق عنوان HTTP user-agent
في عنصر XML يُسمى User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
بالنسبة إلى حمولات JSON، يمكنك إدراج متغيرات باستخدام السمتَين variablePrefix
وvariableSuffix
مع أحرف تحديد الحدود كما هو موضّح في المثال التالي:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
للاطّلاع على قائمة كاملة بمتغيرات التدفق، يُرجى الرجوع إلى مرجع متغيرات التدفق.
اعتبارًا من الإصدار 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://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
add-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
- نوع الرسالة: طلب
بالإضافة إلى ذلك، لا يمكنك ضبط مَعلمات طلب البحث إلا عندما تكون السمة type
للعنصر <AssignTo>
عبارة عن رسالة طلب. ولن يؤثر ضبطها على الردّ.
إذا حدّدت مصفوفة فارغة من مَعلمات طلب البحث في سياستك (<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
على "false" (القيمة التلقائية)، لا ينشئ هذا المثال طلبًا جديدًا. تؤثّر جميع العمليات في هذه السياسة على الطلب الأصلي.
مثال 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 هي "صحيح". القيم الصالحة هي "طلب" أو "رد".
القيمة التلقائية هي "طلب". في حال إغفال هذه السمة، ينشئ 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
لتحديد متغيّر تدفق تكون قيمة المتغيّر فيه نموذج رسالة. على سبيل المثال، يمكنك تخزين نموذج رسالة كـ سمة مخصّصة في <AssignVariable>
. عندما يحدّد 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>
إذا تعذّر إجراء أي من عمليات التعيين، سيتم بدلاً من ذلك تعيين القيمة "ErrorOnCopy" إلى متغير التدفق الوجهة.<AssignVariable>
<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
add-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>
)
تحدّد هذه السمة ما إذا كان يجب نسخ عبارة السبب من استجابة المصدر إلى استجابة الوجهة. ليس لهذا العنصر أي تأثير في الطلب.
في حال ضبط القيمة على "صحيح"، تنسخ هذه السياسة 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>
على "true"، ما يؤدي إلى أن تنسخ <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>
على "true"، ما يؤدي إلى نسخ رمز الحالة من عنصر الرد التلقائي إلى عنصر رد مخصّص جديد:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
يمكنك استخدام <StatusCode>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
من الاستخدامات الشائعة للرمز <StatusCode>
التأكّد من أنّ استجابة الخادم الوكيل تتضمّن الحالة نفسها
التي تتضمّنها الاستجابة الواردة من الهدف عندما تكون قيمة السمة createNew
في <AssignTo>
هي "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
بالإضافة إلى سمة 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]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
مثال 1
يضبط المثال التالي قيمة <IgnoreUnresolvedVariables>
على "true":
<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-urlencoded"
<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>
. اضبط القيمة على "true" لمحو الحمولة، أو "false" بخلاف ذلك. القيمة التلقائية هي "false".
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<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 |
تحدّد هذه السمة بشكل اختياري المحدّد الأوّل في متغيّر التدفق. القيمة التلقائية هي "{". لمزيد من المعلومات، اطّلِع على مرجع متغيرات التدفق. | اختياري | Char |
variableSuffix |
تحدّد هذه السمة بشكل اختياري المحدّد اللاحق في متغيّر التدفق. القيمة التلقائية هي "}". لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيرات التدفق. | اختياري | Char |
<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> على "صحيح") |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو 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>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المشار إليه، كما يوضّح المثال التالي:
<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>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المرجعي.
يمكنك استخدام <Version>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
إنشاء رسائل طلبات مخصّصة
يمكنك استخدام سياسة AssignMessage لإنشاء رسالة طلب مخصّصة. بعد إنشاء طلب مخصّص، يمكنك استخدامه بالطرق التالية:
- الوصول إلى متغيراته في سياسات أخرى
- تمريرها إلى خدمة خارجية
لإنشاء رسالة طلب مخصّصة، استخدِم العنصر <AssignTo>
في سياسة AssignMessage. اضبط قيمة createNew
على "true" وحدِّد اسم الرسالة الجديدة في نص العنصر، كما هو موضّح في المثال التالي:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
بشكلٍ تلقائي، لا يتّخذ Edge أي إجراء بشأن رسالة الطلب المخصّصة. بعد إنشائه، سيواصل Edge تنفيذ الخطوات باستخدام الطلب الأصلي. لاستخدام الطلب المخصّص، أضِف سياسة، مثل سياسة ServiceCallout، إلى الخادم الوكيل الذي يمكنه تمرير الطلب المخصّص إلى خدمة خارجية.
تنشئ الأمثلة التالية رسائل طلب مخصّصة:
مثال 1
ينشئ المثال التالي عنصر طلب مخصّصًا باستخدام Assign Message:
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
في هذا المثال:
- تنشئ هذه السمة عنصر رسالة طلب جديدًا باسم "MyCustomRequest".
- في MyCustomRequest، تنصّ هذه السياسة على ما يلي:
- ينسخ قيمة عنوان HTTP
user-agent
من الطلب الوارد إلى الرسالة الجديدة. بما أنّ<Copy>
يستخدم مرجعًا مطلقًا لمتغير التدفقuser-agent
، ليس من الضروري تحديد السمةsource
لـ<Copy>
. - تضبط هذه السمة مَعلمة طلب البحث
address
في الرسالة المخصّصة على قيمة مَعلمة طلب البحثaddy
في الطلب الوارد. - تضبط هذه السمة فعل HTTP على
GET
.
- ينسخ قيمة عنوان HTTP
- يضبط
<IgnoreUnresolvedVariables>
على "false". عندما تكون قيمة<IgnoreUnresolvedVariables>
هي "false"، إذا لم يكن أحد المتغيرات التي تحاول السياسة إضافتها متوفّرًا، سيتوقّف Edge عن المعالجة في مسار واجهة برمجة التطبيقات.
مثال 2
في ما يلي مثال آخر يوضّح كيفية إنشاء عنصر طلب مخصّص باستخدام Assign Message:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
ينشئ هذا المثال طلبًا مخصّصًا جديدًا باسم "partner.request". بعد ذلك، يتم ضبط
<Verb>
و<Payload>
على الطلب الجديد.
يمكنك الوصول إلى رسالة طلب مخصّصة في سياسة AssignMessage أخرى تحدث لاحقًا في التدفق. يحصل المثال التالي على قيمة عنوان user-agent
لرسالة الطلب المخصّصة:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
الفيديوهات
شاهِد الفيديوهات التالية لمعرفة المزيد من المعلومات حول سياسة AssignMessage.
فيديو | الوصف |
---|---|
لماذا سياسة "تعيين رسالة"؟ | تعرَّف على مزايا استخدام سياسة AssignMessage لتعديل طلب أو ردّ واجهة برمجة التطبيقات بدون تعديل الرمز البرمجي للخادم الخلفي. |
نسخ عناصر واجهة برمجة التطبيقات باستخدام سياسة 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="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
المخططات
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd
). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.
مواضيع ذات صلة
تتوفّر عينات عملية لسياسة AssignMessage في عينات "منصّة واجهة برمجة التطبيقات".
للاطّلاع على مثال أكثر تقدّمًا حول كيفية تجاهل target.url
من
ProxyEndpoint، يُرجى الاطّلاع على مقالة "منتدى Apigee" هذه.
للاطّلاع على "مسار محدّد" أثناء التنفيذ في سياسة ServiceCallout، يمكنك الاطّلاع على مثال "التعلّم من خلال الممارسة" في نماذج Apigee على GitHub. ما عليك سوى استنساخ المستودع واتّباع التعليمات الواردة في هذا الموضوع. يستخدم المثال سياسة AssignMessage لضبط مسار الطلب، ثم يستخدم سياسة Service Callout لإرسال الطلب إلى خدمة خارجية.