أنت تطّلع على مستندات 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: الحصول على عناوين استجابة Service Callout
في المثال التالي، لنفترض أنّ سياسة ServiceCallout متوفّرة في طلب الخادم الوكيل لواجهة برمجة التطبيقات،
ويحتوي ردّ ServiceCallout على رؤوس متعددة تحمل الاسم نفسه
(Set-Cookie
). بافتراض أنّ متغيّر ردّ ServiceCallout هو القيمة التلقائية
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
أضِف-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 |
لتحديد ما إذا كانت هذه السياسة تنشئ رسالة جديدة عند منح القيم إذا كانت القيمة "صحيحة"، تنشئ السياسة متغيّرًا جديدًا من النوع
الذي يحدّده إذا كانت القيمة "false"، تستجيب السياسة بإحدى الطريقتَين التاليتَين:
في حال عدم تحديد
|
اختياري | منطقي |
transport |
تُحدِّد طريقة النقل لنوع رسالة الطلب أو الردّ. القيمة التلقائية هي "http" (القيمة الوحيدة المتوافقة). |
اختياري | سلسلة |
type |
تحدِّد نوع الرسالة الجديدة عندما تكون قيمة createNew هي "صحيح". القيم
الصالحة هي "طلب" أو "استجابة".
القيمة التلقائية هي "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>
، احذف brackets "{}" المغلقة
التي عادةً ما تستخدمها للإشارة إلى متغيّر مسار. على سبيل المثال،
لضبط قيمة المتغيّر الجديد على قيمة متغيّر 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>
|
العناصر الفرعية | بدون |
عند استخدام <Value>
مع العنصر <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>
القيمة "خطأ في عملية النسخ" بدلاً من ذلك
لمتغيّر مسار الوجهة.
<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>
)
لتحديد ما إذا كان يجب نسخ المسار من طلب المصدر إلى طلب الوجهة ليس لهذا العنصر أي تأثير في الردّ.
إذا كانت القيمة "صحيح"، تنسخ هذه السياسة المسار من رسالة الطلب المحدّدة من خلال سمة 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>
)
تحدِّد هذه السمة ما إذا كان يجب نسخ الحمولة من المصدر إلى الوجهة. يمكن أن يكون المصدر والوجهة طلبَين أو استجابتَين.
إذا كانت القيمة "صحيح"، تنسخ هذه السياسة الحمولة من الرسالة المحددة من خلال سمة 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>
)
لتحديد ما إذا كان سيتم نسخ رمز الحالة من استجابة المصدر إلى استجابة الوجهة لا يؤثّر هذا العنصر في أي طلب.
إذا كانت القيمة "صحيحة"، تنسخ هذه السياسة رمز الحالة من رسالة الردّ المحدّدة من قِبل سمة 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>
على "صحيح"، ما يؤدي إلى نسخ الفعل من
الطلب التلقائي إلى طلب مخصّص جديد:
<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" ل clearing the payload (محو الحمولة)، أو على "false" بخلاف ذلك. القيمة التلقائية هي "false".
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الرئيسي |
<Remove>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Payload>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
مثال 1
يضبط المثال التالي <Payload>
على "true" لكي تتم clearing
الحمولة المطلوبة:
<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
على "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>
على "خطأ" عندما يكون<IgnoreUnresolvedVariables>
هو "خطأ"، إذا لم يكن أحد المتغيّرات التي تحاول السياسة إضافتها متوفّرًا، سيتوقّف 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 |
إزالة عناصر واجهات برمجة التطبيقات باستخدام سياسة AssignMessage | أزِل عناصر واجهة برمجة التطبيقات وعدِّلها قبل وصولها إلى الخلفية المستهدَفة باستخدام سياسة AssignMessage. |
إضافة عناصر وضبطها في واجهة برمجة التطبيقات باستخدام سياسة AssignMessage | يمكنك تغيير طلب بيانات واجهة برمجة التطبيقات أو استجابتها من خلال إضافة مَعلمات طلب بحث أو عناوين أو مَعلمات نموذج أو حِزم بيانات باستخدام سياسة AssignMessage. |
إنشاء متغيّرات مخصّصة باستخدام سياسة AssignMessage | اضبط متغيّرات المسار المخصّصة باستخدام سياسة AssignMessage واستخدِم المتغيّرات في السياسات الأخرى في خادم API الوكيل. |
إنشاء كائنات طلب أو استجابة جديدة باستخدام سياسة 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
). يُرجى العِلم أنّ مخطّطات السياسات
متاحة على GitHub.
مواضيع ذات صلة
تتوفّر عيّنات شغالة من سياسة AssignMessage في عيّنات منصّة واجهة برمجة التطبيقات.
للحصول على مثال أكثر تقدمًا حول كيفية إلغاء target.url
من
ProxyEndpoint، يُرجى الاطّلاع على مقالة "منتدى Apigee" هذه.
للاطّلاع على "مسار محدّد" أثناء تنفيذه في سياسة ServiceCallout، اطّلِع على هذا المثال التعليمي في نماذج Apigee على GitHub. ما عليك سوى استنساخ المستودع و اتّباع التعليمات الواردة في هذا الموضوع. يستخدم المثال سياسة AssignMessage لضبط مسار الطلب، ثم يستخدم سياسة Service Callout لتقديم الطلب إلى خدمة خارجية.