أنت الآن بصدد الاطّلاع على مستندات 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 name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2: إزالة الحمولة
يحذف المثال التالي الحمولة من الرد باستخدام العنصر <Remove>
:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: تعديل الردّ
يعدّل المثال التالي عنصر استجابة حالي من خلال إضافة عنوان إليه:
<AssignMessage name="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
لا ينشئ هذا المثال رسالة جديدة. بدلاً من ذلك، يتم تعديل رسالة استجابة حالية من خلال إضافة عنوان HTTP.
بما أنّ هذا المثال يحدّد response
كاسم المتغيّر في العنصر <AssignTo>
، تعدّل هذه السياسة عنصر الاستجابة الذي تم ضبطه في الأصل باستخدام البيانات التي يعرضها الخادم المستهدف.
يتم استخلاص عنوان HTTP الذي تضيفه هذه السياسة إلى رسالة الاستجابة من متغيّر تتم تعبئته بواسطة سياسة LookupCache. لذلك، تحتوي رسالة الردّ المعدَّلة بموجب سياسة "تعيين الرسالة" على عنوان HTTP يشير إلى ما إذا كان قد تم استرداد النتائج من ذاكرة التخزين المؤقت أم لا. يمكن أن يكون ضبط العناوين في الرد مفيدًا لتصحيح الأخطاء وتحديد المشاكل وحلّها.
4: ضبط المحتوى الديناميكي
يمكنك استخدام Assign Message لتضمين محتوى ديناميكي في حمولة رسائل الطلبات والردود.
لتضمين متغيرات تدفق Edge في حمولة XML، ضَع المتغير المحدّد بين قوسين معقوفين، على النحو التالي: {prefix.name}
.
يضمّن المثال التالي قيمة متغيّر تدفق عنوان HTTP user-agent
في عنصر XML يُسمى User-agent
:
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>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="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
من أفضل الممارسات إزالة مَعلمة طلب البحث apikey
من رسالة الطلب عند استخدام سياسة VerifyAPIKey لمصادقة المستخدم. ويتم ذلك لمنع تمرير معلومات حساسة إلى الخلفية المستهدَفة.
6: ضبط/الحصول على المتغيّرات
يستخدم المثال التالي ثلاث سياسات "تعيين الرسالة":
- إنشاء ثلاثة متغيّرات للتدفق في الطلب، مع قيم ثابتة
- الحصول على متغيرات التدفق بشكل ديناميكي في سياسة ثانية في مسار الطلب
- يتم ضبطها في حمولة الردّ
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-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> </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 name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </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 name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
المثال 2
يستخدم المثال التالي العنصر <Headers>
لإضافة عنوان partner-id
إلى الطلب الذي سيتم إرساله إلى نقطة النهاية المستهدَفة:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
المثال 3
يستخدم المثال التالي العنصر <QueryParams>
لإضافة مَعلمة طلب بحث واحدة بقيمة ثابتة إلى الطلب:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
يستخدم هذا المثال <Add>
في عملية التحضير المسبق للطلب. إذا نظرت إلى النتائج في أداة مثل أداة التتبُّع، سيصبح الطلب إلى https://example-target.com/get
هو https://example-target.com/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 name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
المثال 2
يحصل المثال التالي على قيمة مَعلمة طلب البحث name
ويضيفها إلى الطلب كمَعلمة نموذج، ثم يزيل مَعلمة طلب البحث:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
يُرجى العِلم أنّ هذا المثال لا يحدّد هدفًا باستخدام <AssignTo>
. تضيف هذه السياسة المَعلمة
إلى الطلب فقط.
المثال 3
يضيف المثال التالي مَعلمات نماذج متعدّدة إلى الطلب:
<AssignMessage name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
يحصل هذا المثال على مَعلمات سلسلة طلب البحث من الطلب الأصلي ويضيفها كمَعلمات نموذج بأسماء مختلفة. بعد ذلك، يزيل مَعلمات طلب البحث الأصلية. سترسل Apigee الطلب المعدَّل إلى نقطة النهاية المستهدَفة.
يمكنك استخدام أداة التتبُّع للاطّلاع على المسار. ستلاحظ أنّ نص الطلب يتضمّن بيانات النموذج المرمّزة في عنوان URL، والتي تم تمريرها في الأصل كمَعلمات سلسلة طلب البحث:
username=nick&zip_code=90210&default_language=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
يضيف المثال التالي عنوان partner-id
إلى رسالة الطلب،
ويعيّن قيمة متغيّر التدفق verifyapikey.VAK-1.developer.app.partner-id
إلى هذا العنوان.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </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 name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </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>
ولكن بدون تحديد قيمة نصية للعنصر، ستسري السياسة على الطلب أو الرد التلقائيين، استنادًا إلى مكان تنفيذ السياسة. إذا تم تنفيذ السياسة في مسار الطلب، فإنّها تؤثّر في رسالة الطلب. إذا تم تنفيذها في مسار الاستجابة، ستؤثر السياسة في الاستجابة تلقائيًا.
يستخدم العنصر <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"> <!-- DO NOT do this --> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
المثال 2
ينشئ المثال التالي عنصر طلب جديدًا:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
عند إنشاء عنصر طلب أو رد جديد، تعمل العناصر الأخرى في سياسة AssignMessage (مثل <Add>
و<Set>
و<Copy>
) على عنصر الطلب الجديد هذا.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في المسار، أو إرسال عنصر الطلب الجديد إلى خدمة خارجية باستخدام سياسة ServiceCallout.
المثال 3
ينشئ المثال التالي عنصر طلب جديدًا باسم "MyRequestObject":
<AssignMessage name="assign>to-<2" AssignTo createNew="true" transport=&"http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo /AssignMessage
عند إنشاء عنصر طلب أو رد جديد، تعمل العناصر الأخرى في سياسة AssignMessage (مثل <Add>
و<Set>
و<Copy>
) على عنصر الطلب الجديد هذا.
يمكنك الوصول إلى عنصر الطلب الجديد في سياسات أخرى لاحقًا في المسار، أو إرسال عنصر الطلب الجديد إلى خدمة خارجية باستخدام سياسة ServiceCallout.
يوضّح الجدول التالي سمات النوع <AssignTo>
:
السمة | الوصف | مطلوب؟ | النوع |
---|---|---|---|
createNew |
تحدّد ما إذا كانت هذه السياسة ستنشئ رسالة جديدة عند تعيين القيم. إذا كانت القيمة "true"، تنشئ السياسة متغيّرًا جديدًا من النوع المحدّد بواسطة إذا كانت القيمة "false"، ستستجيب السياسة بإحدى الطريقتَين التاليتَين:
في حال عدم تحديد
|
اختياري | منطقي |
transport |
تحدّد هذه السمة نوع النقل لنوع رسالة الطلب أو الرد. القيمة التلقائية هي "http" (القيمة الوحيدة المتاحة). |
اختياري | سلسلة |
type |
تحدّد هذه السمة نوع الرسالة الجديدة عندما تكون قيمة createNew هي "صحيح". القيم الصالحة هي "طلب" أو "رد".
في حال إغفال هذه السمة، ينشئ Edge إما طلبًا أو ردًا، وذلك حسب مكان تنفيذ هذه السياسة في التدفق. |
اختياري | سلسلة |
<AssignVariable>
تعيّن هذه السمة قيمة لمتغيّر في التدفق. إذا لم يكن متغيّر التدفق متوفّرًا، سيتم إنشاؤه من خلال
<AssignVariable>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقّد |
العنصر الأصل |
<AssignMessage>
|
العناصر الفرعية |
<Name> (مطلوبة)<Ref> <Template> <Value> |
يمكن أن تكون القيمة التي تحدّدها لمتغيّر التدفق إحدى القيم التالية:
- السلسلة الحرفية: استخدِم العنصر الفرعي
<Value>
لتحديد قيمة سلسلة حرفية لمتغير التدفق. - متغيّر التدفق: استخدِم العنصر الفرعي
<Ref>
لتحديد قيمة متغيّر تدفق حالي لمتغيّر تدفق الوجهة. للحصول على قائمة كاملة بمتغيرات التدفق التي يمكن استخدامها كمصدر، راجِع مرجع متغيرات التدفق. - نموذج الرسالة: استخدِم العنصر الثانوي
<Template>
لتحديد نموذج رسالة يتم احتساب معدّل التغيّر فيه، وذلك للحصول على القيمة التي سيتم وضعها في متغيّر التدفق الوجهة.
يستخدم العنصر <AssignVariable>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame < Refso>urce_variable/Re<f Tem>platemessage<_template/Template or Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate Value>v<ariable_value/>Value /AssignVariable /AssignMessage
استخدِم العنصر <Ref>
لتحديد متغيّر المصدر. إذا لم يكن من الممكن الوصول إلى المتغيّر الذي يشير إليه <Ref>
، تستخدم Edge القيمة المحدّدة بواسطة العنصر <Value>
. في حال تحديد
<Template>
، ستكون له الأولوية على العناصر الفرعية الأخرى.
المثال 1
يُعيِّن المثال التالي قيمة المتغيّر الجديد، myvar
، إلى القيمة الحرفية "42":
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
المثال 2
يعيّن المثال التالي قيمة متغيّر التدفق request.header.user-agent
لمتغيّر التدفق الوجهة myvar
، وقيمة مَعلمة طلب البحث country
لمتغيّر التدفق الوجهة Country
:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
في حال تعذُّر أي من عمليات التعيين، يحدّد Edge القيمة "ErrorOnCopy" لمتغير التدفق الوجهة بدلاً من ذلك.
إذا لم تكن متغيّرات التدفق myvar
أو Country
متوفّرة، ينشئها <AssignVariable>
.
المثال 3
يستخدم المثال التالي العنصر الفرعي <Template>
لربط متغيّرَي سياق
بسلسلة حرفية (واصلة) بينهما:
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
من الاستخدامات الشائعة لـ <AssignVariable>
ضبط قيمة تلقائية لمَعلمة طلب بحث أو عنوان أو قيمة أخرى يمكن تمريرها مع الطلب. يمكنك إجراء ذلك باستخدام العنصرَين الفرعيَين <Ref>
و<Value>
معًا. لمزيد من المعلومات، يُرجى الاطّلاع على الأمثلة الخاصة بـ <Ref>
.
<Name>
(عنصر ثانوي من <AssignVariable>
)
تحدّد هذه السمة اسم متغيّر مسار الوجهة (مثل المتغيّر الذي يتم ضبط قيمته بواسطة سياسة AssignMessage). إذا لم يكن المتغيّر المسمّى في <AssignVariable>
متوفّرًا، تنشئ السياسة متغيّرًا بهذا الاسم.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | مطلوب |
النوع | سلسلة |
العنصر الأصل |
<AssignVariable>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Name>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble< Namevariab>l<e_name/Name >/AssignVariable /AssignMessage
المثال 1
يحدّد المثال التالي المتغيّر الوجهة على أنّه myvar
، ويضبطه على القيمة الحرفية "42":
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
إذا لم يكن myvar
متوفّرًا، ينشئه <AssignVariable>
.
<Ref>
(عنصر ثانوي من <AssignVariable>
)
تحدّد هذه السمة مصدر عملية التعيين كمتغيّر في التدفق. يمكن أن يكون متغيّر التدفق أحد متغيّرات التدفق المحدّدة مسبقًا (كما هو موضّح في مرجع متغيّرات التدفق)، أو متغيّر تدفق مخصّص أنشأته.
يتم دائمًا تفسير قيمة <Ref>
على أنّها متغيّر تدفّق، ولا يمكنك تحديد سلسلة حرفية كقيمة. لتعيين قيمة سلسلة حرفية، استخدِم العنصر <Value>
بدلاً من ذلك.
القيمة التلقائية | 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]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame< Refsource_>v<ariable/Ref >/AssignVariable /AssignMessage
المثال 1
يعيّن المثال التالي قيمة المتغيّر request.header.user-agent
في التدفق إلى المتغيّر myvar
في التدفق الوجهة، كما يعيّن قيمة مَعلمة طلب البحث country
إلى المتغيّر Country
:
<AssignMessage name="assignvariab>le-<4" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-ag<ent/Ref /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>oun<try/Ref /Assi>g<nVariable /Ass>ignMessage
في هذا المثال، لم يتم تحديد قيمة تلقائية (أو قيمة احتياطية) لأي من عمليات التعيين في Edge.
المثال 2
يعيّن المثال التالي قيمة متغيّر التدفق request.header.user-agent
إلى متغيّر التدفق الوجهة myvar
، وقيمة مَعلمة طلب البحث country
إلى المتغيّر Country
:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
في هذا المثال، إذا كانت قيم request.header.user-agent
المتغيّر المتسلسل
أو مَعلمة طلب البحث Country
فارغة أو غير قابلة للقراءة أو غير صالحة، سيُعيّن Edge
القيمة "ErrorOnCopy" للمتغيّرات الجديدة.
المثال 3
من حالات الاستخدام الشائعة لـ <AssignVariable>
ضبط القيمة التلقائية لمَعلمة طلب بحث أو عنوان أو قيمة أخرى يمكن تمريرها مع الطلب. على سبيل المثال، يمكنك إنشاء وكيل لواجهة برمجة تطبيقات خاصة بالطقس، حيث يتضمّن الطلب مَعلمة طلب بحث واحدة باسم "w". تحتوي هذه المَعلمة على معرّف المدينة التي تريد معرفة حالة الطقس فيها. يتضمّن عنوان URL للطلب التنسيق التالي:
http://myCO.com/v1/weather/forecastrss?w=city_ID
لتحديد قيمة تلقائية للمتغيّر "w"، أنشئ سياسة AssignMessage على النحو التالي:
<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3" AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/ > I<gnoreUnresolve>dVari<able>strue /IgnoreUnres<olved>Varia<ble>s AssignVariable < N>amere<quest>.querypa<ram.w/>Nam<e Refreques>t<.queryparam.w/>Ref Value12797282/Value /AssignVariable /AssignMessage
في هذا المثال، تحصل <AssignVariable>
على قيمة request.queryparam.w
وتعيِّنها لنفسها. إذا كان متغيّر التدفق فارغًا، أي تم حذف مَعلمة طلب البحث "w" من الطلب، يستخدم هذا المثال القيمة التلقائية من العنصر <Value>
. لذلك، يمكنك إرسال طلب إلى وكيل واجهة برمجة التطبيقات هذا بدون مَعلمة طلب البحث "w":
http://myCO.com/v1/weather/forecastrss
...وسيظل خادم وكيل واجهة برمجة التطبيقات يعرض نتيجة صالحة.
على عكس ما يحدث عند استخدام <Value>
، يجب أن تكون قيمة <Ref>
متغيّرًا متسلسلاً، مثل سمة من سمات الكائن request
أو response
أو target
. يمكن أن تكون القيمة أيضًا متغيّر تدفّق مخصّصًا أنشأته.
إذا حدّدت متغيّر تدفق غير متوفّر لقيمة <Ref>
، وكانت قيمة <IgnoreUnresolvedVariables>
هي "true"، سيعرض Edge خطأً.
<Template>
(عنصر ثانوي من <AssignVariable>
)
تحدّد هذه السمة نموذج رسالة. يتيح لك نموذج الرسالة استبدال السلسلة المتغيرة عند تنفيذ السياسة، ويمكنه الجمع بين السلاسل الحرفية وأسماء المتغيرات المضمّنة بين أقواس معقوفة. بالإضافة إلى ذلك، تتيح نماذج الرسائل وظائف مثل إلغاء التضمين وتحويل حالة الأحرف.
استخدِم السمة ref
لتحديد متغيّر تدفق تكون قيمة المتغيّر فيه نموذج رسالة. على سبيل المثال، يمكنك تخزين نموذج رسالة كـ سمة مخصّصة في <AssignVariable>
. عندما يحدّد Edge تطبيق المطوّر بعد التحقّق من مفتاح واجهة برمجة التطبيقات أو رمز الأمان (من خلال سياسة إضافية)، يمكن أن يستخدم العنصر <AssignVariable>
نموذج الرسالة من السمة المخصّصة للتطبيق، والتي تتوفّر كمتغيّر تدفق من سياسة الأمان.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<AssignVariable>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Template>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e" > AssignVariabl<e Tem>platemessage<_template/Template or Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate /AssignVariable /AssignMessage
المثال 1
يستخدم المثال التالي بنية إنشاء نماذج الرسائل لربط متغيرَي سياق بسلسلة حرفية (واصلة) بينهما:
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
المثال 2
يحدّد المثال التالي متغيّرًا خاصًا بسير العمل، حيث تكون قيمة المتغيّر عبارة عن نموذج رسالة محدّد مسبقًا. استخدِم هذا الخيار إذا كنت تريد إدخال نموذج محدّد مسبقًا في وقت التشغيل بدون الحاجة إلى تعديل السياسة:
<AssignMessage name='AV-via-template-indirec>tly<39; IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='my_templat>e_v<ariable'/ > </AssignVariabl>e /AssignMessage
المثال 3
يحدّد المثال التالي متغيّرًا في التدفق وقيمة نصية. في هذه الحالة، إذا كان المتغيّر المشار إليه غير فارغ، يتم استخدام هذه القيمة كنموذج. إذا كانت القيمة المشار إليها فارغة، سيتم استخدام قيمة النص (في هذه الحالة، {system.uuid}-{messageid}
) كنموذج. يفيد هذا النمط في تقديم قيمة "تجاوز"، حيث تريد في بعض الحالات تجاوز النموذج التلقائي (الجزء النصي) بقيم يتم ضبطها بشكل ديناميكي. على سبيل المثال، قد تسترد عبارة شرطية قيمة
من خريطة مفتاح-قيمة وتضبط المتغيّر المشار إليه على تلك القيمة:
<AssignMessage name='AV-template-with-fallb>ack<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template > </AssignVariabl>e /AssignMessage
<Value>
(عنصر ثانوي من <AssignVariable>
)
تحدّد هذه السمة قيمة متغيّر مسار الوجهة الذي تم ضبطه باستخدام <AssignVariable>
. يتم دائمًا تفسير القيمة على أنّها سلسلة حرفية، ولا يمكنك استخدام متغيّر تدفّق كقيمة، حتى إذا وضعت القيمة بين قوسين معقوفين ("{}"). لاستخدام متغيّر تدفّق، استخدِم <Ref>
بدلاً من ذلك.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<AssignVariable>
|
العناصر الفرعية | بدون |
عند استخدامها مع العنصر <Ref>
، تعمل <Value>
كقيمة تلقائية (أو احتياطية). إذا لم يتم تحديد <Ref>
أو كان غير قابل للحل أو كان فارغًا، يتم استخدام قيمة <Value>
.
يستخدم العنصر <Value>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < Na>mevariable_nam<e/Name> < Valuevariable>_<value/Value >/AssignVariable /AssignMessage
مثال 1
يضبط المثال التالي قيمة متغيّر تدفق الوجهة، myvar
، على القيمة الحرفية "42":
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
مثال 2
يعيّن المثال التالي قيمة المتغيّر request.header.user-agent
إلى المتغيّر myvar
وقيمة مَعلمة طلب البحث country
إلى المتغيّر Country
:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
إذا تعذّر إجراء أي من عمليات التعيين، سيتم بدلاً من ذلك تعيين القيمة "ErrorOnCopy" إلى متغير التدفق الوجهة.<AssignVariable>
<Copy>
نسخ القيم من الرسالة المحدّدة بواسطة السمة source
إلى الرسالة المحدّدة بواسطة العنصر <AssignTo>
إذا لم تحدّد هدفًا باستخدام <AssignTo>
، ستنسخ هذه السياسة القيم إلى الطلب أو الردّ، وذلك حسب مكان تنفيذ هذه السياسة في سير العمل.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
في حال عدم تحديد أي عناصر فرعية أسفل العنصر <Copy>
، سيتم نسخ جميع أجزاء رسالة المصدر المحدَّدة.
يستخدم العنصر <Copy>
البنية التالية:
البنية
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> name<="policy_name"
Co>py so<urce="[request|response]&qu<ot;
!--> Can also <be an empt>y array< (FormParams/) -->
FormP>arams
For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
...<
/Fo>rmParams
< !-- >Can als<o be an empty array (Head>ers/) --><
He>aders
Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
<...
>/Head<ers
Path[false|true]/Path
< Payload[fa>lse|true]/<Payload
> !-- Ca<n also be an empty array (QueryPa>rams/) -->
< QueryPara>ms
QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
> ...
/Q<ueryParams<>/span>
R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
Stat<usCode[f>als<e|tru>e]/<StatusCode
Verb[false|true]/Verb<
>
Version[f>als<e|true]/Version
/Copy
!-- Used as the destination for the Copy values --
A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
المثال 1
يُنسخ المثال التالي عنوانًا وثلاث مَعلمات نموذج ومسارًا وجميع مَعلمات طلب البحث من الرسالة request
إلى طلب جديد مخصّص باسم newRequest
:
<AssignMessage name="AM-co>py-<1" AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo <Copy source="request&qu>ot; < Heade>rs < Header> name=&<quot;Header_Name_1"/ /Head>ers < FormParams FormParam name=&q>uot;For<m_Param_Name_1"/ FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/ < FormPa>ram< name>=<"Form_Par>am_Name_3"/ /FormParams Pathtrue/Path QueryParams/ /Copy /AssignMessage
بما أنّ عناصر مثل <Payload>
و<Verb>
غير متوفّرة، لا تنسخ السياسة هذه الأجزاء من الرسالة.
المثال 2
يزيل المثال التالي أولاً كل ما في الرسالة الحالية response
، ثم ينسخ كل القيم من رسالة مختلفة باسم secondResponse
إلى الرسالة response
:
<AssignMessage name='AM-Copy-Respo>nse<' AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo !>-- <first r>emo<ve any existing values -- Remove/ !-- then copy eve>ryt<hing from the designated mess>a<ge -- Copy s>ource="secondResponse"/ /AssignMessage
يحتوي العنصر <Copy>
على سمة واحدة:
السمة | الوصف | مطلوب؟ | النوع |
---|---|---|---|
المصدر |
تحدّد هذه السمة الكائن المصدر للنسخة.
|
اختياري | سلسلة |
<FormParams>
(عنصر ثانوي من <Copy>
)
نسخ مَعلمات النموذج من الطلب المحدّد بواسطة سمة source
لعنصر <Copy>
إلى الطلب المحدّد بواسطة عنصر <AssignTo>
ليس لهذا العنصر أي تأثير في الرد.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> أو مصفوفة فارغة |
العنصر الأصل |
<Copy>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !--> Can also <be an empt>y array< (FormParams/) --> FormP>arams For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram ... /FormParams /Copy /AssignMessage
المثال 1
يَنسخ المثال التالي مَعلمة نموذج واحدة من الطلب إلى الطلب المخصّص "MyCustomRequest":
<AssignMessage name="copy-formpara>ms-<1" Copy source>=&quo<t;request&>quot; < FormParams FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram /FormParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
المثال 2
يؤدي المثال التالي إلى نسخ جميع مَعلمات النموذج إلى الطلب المخصّص "MyCustomRequest":
<AssignMessage name="copy-formpara>ms-<2" Copy source>=&quo<t;request&q>uot<; > Fo<rmParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
يُظهر المثال التالي نسخ ثلاث مَعلمات نموذج إلى الطلب المخصّص "MyCustomRequest":
<AssignMessage name="copy-formpara>ms-<3" Copy source>=&quo<t;request&>quot; < FormParams FormPara>m name=<"paramName1"/ > FormP<aram name="paramName2&q>uot;/< Form>Par<am na>me=<"paramName3"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
المثال 4
إذا كانت هناك عدة مَعلمات نموذج تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-formpara>ms-<4" Copy source>=&quo<t;request&>quot; < FormParams >FormPar<am name="f1&quo>t;/ < FormParam name=&quo>t;f2&<quot;/ > F<ormPa>ram< name="f3.2"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
ينسخ هذا المثال "f1" و"f2" والقيمة الثانية من "f3". إذا كانت السمة "f3" تتضمّن قيمة واحدة فقط، لن يتم نسخها.
يمكنك استخدام <FormParams>
فقط عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: ردّ
- أحد الإجراءَين التاليَين (أو كلاهما):
- بيانات النموذج: يتم ضبطها على قيمة معيّنة أو "" (السلسلة الفارغة). على سبيل المثال، مع
curl
، أضِف-d ""
إلى طلبك. - عنوان
Content-Length
: اضبط القيمة على 0 (في حال عدم توفّر بيانات في الطلب الأصلي، وإلا، استخدِم الطول الحالي). على سبيل المثال، يمكنك إضافة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]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; >!-- Can al<so be a>n empty< array (Headers/) --> > Headers < H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header ... /Headers /Copy /AssignMessage
المثال 1
ينسخ المثال التالي العنوان user-agent
من الطلب إلى عنصر الطلب المخصّص الجديد:
<AssignMessage name="copy-heade>rs-<1" Copy source>=&quo<t;reque>st"<; Headers Heade>r nam<e=">use<r-age>nt&<quot;/ /Headers /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
المثال 2
لنسخ جميع العناوين، استخدِم عنصر <Headers>
فارغًا، كما يوضّح المثال التالي:
<AssignMessage name="copy-heade>rs-<2" Copy source>=&quo<t;reques>t&q<uot;<>/span> < Headers/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
في حال توفّر عدة عناوين تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-heade>rs-<3" Copy source>=&quo<t;reque>st"<; Headers > Head<er name="h1&>quot;/ < Header name=&>quot;<h2">/ < >Hea<der name="h3.2"/ /Headers /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
يؤدي هذا المثال إلى نسخ "h1" و"h2" والقيمة الثانية من "h3". إذا كانت السمة "h3" تتضمّن قيمة واحدة فقط، لن يتم نسخها.
<Path>
(عنصر ثانوي من <Copy>
)
تحدِّد هذه السمة ما إذا كان يجب نسخ المسار من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الردّ.
إذا كانت القيمة "true"، تنسخ هذه السياسة المسار من رسالة الطلب المحدّدة بواسطة السمة source
للعنصر <Copy>
إلى رسالة الطلب المحدّدة بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Path>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce>="[requ<est|r>esp<onse]>&<quot; Path>[false|true]/Path /Copy /AssignMessage
المثال 1
يوضّح المثال التالي أنّه يجب أن تنسخ سياسة AssignMessage المسار من طلب المصدر إلى عنصر الطلب المخصّص الجديد:
<AssignMessage name="copy-pa>th-<1" Copy source>=&quo<t;re>ques<t&quo>t; < P>ath<true/Path /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <Path>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Payload>
(عنصر ثانوي من <Copy>
)
تحدِّد هذه السمة ما إذا كان يجب نسخ الحمولة من المصدر إلى الوجهة. يمكن أن يكون المصدر والوجهة طلبات أو ردودًا.
إذا كانت القيمة "true"، تنسخ هذه السياسة الحمولة من الرسالة المحدّدة بواسطة السمة source
للعنصر <Copy>
إلى الرسالة المحدّدة بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Payload>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=&q>uot;[request<|respons>e]&<quot;> < Payload[fa>lse|true]/Payload /Copy /AssignMessage
المثال 1
يضبط المثال التالي قيمة <Payload>
على "true" كي يتم نسخ حمولة الطلب من الطلب إلى الردّ:
<AssignMessage name="AM-copy-paylo>ad-<1" Copy source>=&quo<t;reque>st&q<uot; > Pa<yload>tru<e/Payloa>d /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
<QueryParams>
(عنصر ثانوي من <Copy>
)
تنسخ هذه السمة مَعلمات سلسلة طلب البحث من الطلب المحدّد بواسطة السمة source
للعنصر <Copy>
إلى الطلب المحدّد بواسطة العنصر <AssignTo>
. ليس لهذا العنصر أي تأثير في الردّ.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> أو مصفوفة فارغة |
العنصر الأصل |
<QueryParam>
|
العناصر الفرعية | بدون |
يستخدم العنصر <QueryParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !-- >Can also b<e an empty >array (<QueryParams/) --> QueryPar>ams QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram ... /QueryParams /Copy /AssignMessage
المثال 1
يَنسخ المثال التالي مَعلمة طلب البحث "my_param" من الطلب إلى عنصر طلب مخصّص جديد:
<AssignMessage name="copy-querypara>ms-<1" Copy source>=&quo<t;request&q>uot; < QueryParams QueryPa>ram n<ame="my>_pa<ram&q>uot<;/ /QueryParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
المثال 2
ينسخ المثال التالي جميع مَعلمات طلب البحث من الطلب إلى عنصر طلب جديد ومخصّص:
<AssignMessage name="copy-querypara>ms-<2" Copy source>=&quo<t;request&qu>ot;< >Que<ryParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
المثال 3
إذا كانت هناك مَعلمات طلب بحث متعددة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="copy-querypara>ms-<3" Copy source>=&quo<t;request&q>uot; < QueryParams Qu>eryPara<m name="qp1">/ < QueryParam name="q>p2&qu<ot;/ Q>uer<yPara>m n<ame="qp3.2"/ /QueryParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
ينسخ هذا المثال "qp1" و"qp2" والقيمة الثانية من "qp3". إذا كانت السمة "qp3" تتضمّن قيمة واحدة فقط، لن يتم نسخها.
يمكنك استخدام <QueryParams>
فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<ReasonPhrase>
(عنصر ثانوي من <Copy>
)
تحدّد هذه السمة ما إذا كان يجب نسخ عبارة السبب من استجابة المصدر إلى استجابة الوجهة. ليس لهذا العنصر أي تأثير في الطلب.
في حال ضبط القيمة على "صحيح"، تنسخ هذه السياسة ReasonPhrase
من الردّ المحدّد بواسطة السمة source
للعنصر <Copy>
إلى الردّ المحدّد بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <ReasonPhrase>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[>request|resp<onse]" > <Reaso>n<Phrase[false|t>rue]/ReasonPhrase /Copy /AssignMessage
المثال 1
يضبط المثال التالي قيمة <ReasonPhrase>
على true
. مع توفّر العنصرين المصدر و<AssignTo>
كما هو محدّد، يؤدي ذلك إلى أن تنسخ <Copy>
عبارة السبب من رسالة الرد المحدّدة الاسم إلى العنصر response
:
<AssignMessage name="AM-copy-reasonphra>se-<1" Copy source="serviceC>allou<tResponse&qu>ot; < ReasonPhr>ase<true/>Rea<sonPhras>e /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
لا يمكنك استخدام <ReasonPhrase>
إلا عندما تكون رسائل المصدر والوجهة من النوع "ردّ".
<StatusCode>
(عنصر ثانوي من <Copy>
)
تحدّد هذه السمة ما إذا كان سيتم نسخ رمز الحالة من استجابة المصدر إلى استجابة الوجهة. ليس لهذا العنصر أي تأثير في الطلب.
إذا كانت القيمة "true"، تنسخ هذه السياسة رمز الحالة من رسالة الرد المحدّدة بواسطة السمة source
للعنصر <Copy>
إلى رسالة الرد المحدّدة بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <StatusCode>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=">;[request|re<sponse]&quo>t; < S>t<atusCode[false>|true]/StatusCode /Copy /AssignMessage
المثال 1
يضبط المثال التالي <StatusCode>
على "true"، ما يؤدي إلى نسخ رمز الحالة من عنصر الرد التلقائي إلى عنصر رد مخصّص جديد:
<AssignMessage name="copy-statusco>de-<1" Copy source=>"<;response&>quot<; Statu>sCo<detru>e/S<tatusCode /Copy AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo /AssignMessage
لا يمكنك استخدام <StatusCode>
إلا عندما تكون رسائل المصدر والوجهة من النوع "ردّ".
من الاستخدامات الشائعة لـ <StatusCode>
ضبط رمز حالة استجابة الخادم الوكيل على قيمة مختلفة عن القيمة التي تم تلقّيها من الهدف.
<Verb>
(عنصر ثانوي من <Copy>
)
تحدّد هذه السمة ما إذا كان سيتم نسخ فعل HTTP من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الردّ.
إذا كانت القيمة "true"، يتم نسخ الفعل الذي تم العثور عليه في السمة source
الخاصة بالعنصر <Copy>
إلى الطلب المحدّد في العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Verb>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce>="[requ<est|r>esp<onse]>&<quot; Verb>[false|true]/Verb /Copy /AssignMessage
المثال 1
يضبط المثال التالي <Verb>
على "true"، ما يؤدي إلى نسخ الفعل من الطلب التلقائي إلى طلب جديد مخصّص:
<AssignMessage name="copy-ve>rb-<1" Copy source>=&quo<t;re>ques<t&quo>t; < V>erb<true/Verb /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <Verb>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Version>
(عنصر ثانوي من <Copy>
)
يحدّد هذا الخيار ما إذا كان سيتم نسخ إصدار HTTP من طلب المصدر إلى طلب الوجهة. ليس لهذا العنصر أي تأثير في الردّ.
إذا كانت القيمة "true"، يتم نسخ نسخة HTTP التي تم العثور عليها في السمة source
الخاصة بالعنصر <Copy>
إلى العنصر المحدّد بواسطة العنصر <AssignTo>
.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Copy>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Version>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=&q>uot;[request<|respons>e]&<quot;> < Version[fa>lse|true]/Version /Copy /AssignMessage
المثال 1
يضبط المثال التالي قيمة <Version>
على "true" في الطلب، ما يؤدي إلى نسخ الإصدار من كائن الطلب التلقائي إلى كائن طلب مخصّص جديد:
<AssignMessage name="copy-versi>on-<1" Copy source>=&quo<t;reque>st&q<uot; > Ve<rsion>tru<e/Version /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <Version>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<DisplayName>
استخدِم السمة name
بالإضافة إلى سمة name
لتصنيف السياسة في محرِّر واجهة المستخدم الوكيل لمدير
باستخدام اسم مختلف يبدو أكثر طبيعية.
العنصر <DisplayName>
شائع في جميع السياسات.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياريّ. في حال حذف <DisplayName> ، يتم استخدام قيمة سمة name في
السياسة. |
النوع | سلسلة |
العنصر الرئيسي | <PolicyElement> |
العناصر الفرعية | بدون |
يستخدم العنصر <DisplayName>
البنية التالية:
البنية
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
مثال
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
لا يحتوي العنصر <DisplayName>
على سمات أو عناصر فرعية.
<IgnoreUnresolvedVariables>
تحدِّد ما إذا كانت المعالجة تتوقّف عند مواجهة متغيّر لم يتم حله.
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<AssignMessage>
|
العناصر الفرعية | بدون |
اضبط القيمة على true
لتجاهل المتغيرات التي لم يتم حلّها ومواصلة المعالجة، وإلا
false
. القيمة التلقائية هي false
.
يختلف ضبط <IgnoreUnresolvedVariables>
على true
عن ضبط continueOnError
الخاص بـ <AssignMessage>
على true
، لأنّ هذا الإجراء يخصّ ضبط قيم المتغيّرات والحصول عليها. إذا ضبطت continueOnError
على true
، سيتجاهل Edge جميع الأخطاء، وليس فقط الأخطاء التي تحدث عند استخدام المتغيرات.
يستخدم العنصر <IgnoreUnresolvedVariables>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name">; IgnoreUnre<solvedVariables[true|false>]< /IgnoreUnre>solvedVariables /AssignMessage
المثال 1
يضبط المثال التالي قيمة <IgnoreUnresolvedVariables>
على "true":
<AssignMessage name="AM-Set-Hea>der<s&q>uot; < Set > Head<ers Header name=>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er > </Headers /Set IgnoreU>nresolv<edVariablestrue /IgnoreU>n<resolvedVariab>les /AssignMessage
بما أنّ قيمة <IgnoreUnresolvedVariables>
هي true
، إذا لم يتم تحديد المتغيّر possibly-defined-variable
، لن تعرض هذه السياسة خطأً.
<Remove>
يزيل هذا الإجراء العناوين ومَعلمات طلبات البحث ومَعلمات النماذج و/أو حمولة الرسالة من الرسالة. يمكن أن تكون الرسالة طلبًا أو ردًا. يمكنك تحديد الرسالة التي تتأثر بإجراء <Remove>
باستخدام العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقّد |
العنصر الأصل |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Payload> <QueryParams> |
من حالات الاستخدام الشائعة لـ <Remove>
حذف مَعلمة طلب بحث أو عنوان يحتوي على معلومات حساسة من عنصر الطلب الوارد، وذلك لتجنُّب تمريره إلى خادم الخلفية.
يستخدم العنصر <Remove>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam ... /Form<Params > !-- Can< also b>e an em<pty array (Headers/) --&g>t; Heade<rs > Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r < ... /Headers Payload[<false|true]/>Payload < !-- Can a>lso be <an empty array (QueryParams/) --&>gt; QueryPar<ams Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam ... /QueryParams /Remove /AssignMessage
المثال 1
يزيل المثال التالي نص الرسالة من الردّ:
<AssignMessage name="AM-remo>ve-<1" D>isplayNa<meremove-1/D>isp<layNam>e R<emove > P<ayloadtr>ue/<Payload> </Remove > Assign<Torespons>e</AssignTo /Ass>ignMessage
في مسار الاستجابة، تزيل هذه السياسة نص الاستجابة، ولا تعرض للعميل سوى عناوين HTTP.
المثال 2
يزيل المثال التالي جميع مَعلمات النموذج ومَعلمة طلب البحث من العنصر request
:
<AssignMessage name="AM-remo>ve-<2">; R<emove !<-- Empty (F>ormParams/) removes all form par>amete<rs -- F>ormPa<rams/ Q>ueryPar<ams QueryParam n>ame=&<quot;qp1&quo>t;/< /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
المثال 3
يزيل المثال التالي كل شيء من عنصر الرسالة:
<AssignMessage name="AM-remo>ve-<3"> <Remove/ > Assig<nToreques>t</AssignTo /Ass>ignMessage
عادةً ما يتم ذلك فقط إذا كنت ستستخدم العنصر <Set>
أو العنصر <Copy>
لضبط بعض القيم البديلة في الرسالة.
<FormParams>
(عنصر ثانوي من <Remove>
)
يزيل مَعلمات النموذج المحدّدة من الطلب. ليس لهذا العنصر أي تأثير في الرد.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <FormParam> أو مصفوفة فارغة |
العنصر الأصل |
<Remove>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam .>.. /FormParams /Remove /AssignMessage
المثال 1
يزيل المثال التالي ثلاث مَعلمات نموذج من الطلب:
<AssignMessage name="AM-remove-formpara>ms-<1">; R<emove >FormPar<ams FormParam name=">;form_p<aram_1"/ FormParam >name=&q<uot;form_param_2"/ >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/ < /FormPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
المثال 2
يزيل المثال التالي جميع مَعلمات النموذج من الطلب:
<AssignMessage name="AM-remove-formpara>ms-<2">; R<emove F>orm<Params/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
المثال 3
إذا كانت هناك عدة مَعلمات نموذج تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="AM-remove-formpara>ms-<3">; R<emove >FormPar<ams FormParam >name=&q<uot;f1"/ >FormPar<am name="f2">/ < FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/ < /FormPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
يزيل هذا المثال "f1" و"f2" والقيمة الثانية من "f3". إذا كان العمود "f3" يتضمّن قيمة واحدة فقط، لن تتم إزالته.
يمكنك استخدام <FormParams>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(عنصر ثانوي من <Remove>
)
تزيل هذه السياسة عناوين HTTP المحدّدة من الطلب أو الاستجابة، والتي يحدّدها العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <Header> أو مصفوفة فارغة |
العنصر الأصل |
<Remove>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can al>so be an e<mpty ar>ray (He<aders/) --> Header>s Head<er name>="header_n<ame">;he<ader_va>l<ue/Header > ... /Headers /Remove /AssignMessage
المثال 1
يزيل المثال التالي العنوان user-agent
من الطلب:
<AssignMessage name="AM-remove-one-he>ade<r">; R<emove > Head<ers Header name=&qu>ot;us<er-agent>&qu<ot;/ > /<Headers > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
المثال 2
يزيل المثال التالي جميع العناوين من الطلب:
<AssignMessage name="AM-remove-all-hea>der<s">; R<emove > H<eaders/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
المثال 3
في حال توفّر عدة عناوين تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="AM-remove-heade>rs-<3">; R<emove > Head<ers Header >name=&q<uot;h1"/ > Head<er name="h2&qu>ot;/ < He>ade<r name=>&qu<ot;h3.2&>quot;/ < /Head>e<rs /Remove > AssignTorequest/AssignTo /AssignMessage
يزيل هذا المثال "h1" و"h2" والقيمة الثانية من "h3" من الطلب. إذا كان "h3" يتضمّن قيمة واحدة فقط، لن تتم إزالته.
<Payload>
(عنصر ثانوي من <Remove>
)
تحدِّد ما إذا كان <Remove>
يحذف الحمولة في الطلب أو الرد، والتي يحدِّدها العنصر <AssignTo>
. اضبط القيمة على "true" لمحو الحمولة، أو "false" بخلاف ذلك. القيمة التلقائية هي "false".
القيمة التلقائية | خطأ |
هل هو مطلوب؟ | اختياري |
النوع | منطقي |
العنصر الأصل |
<Remove>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Payload>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_na>me" <Remove > <Payload>[<false|true]/Pa>yload /Remove /AssignMessage
المثال 1
يضبط المثال التالي <Payload>
على "true" ليتم محو حمولة الطلب:
<AssignMessage name="AM-remove-paylo>ad-<1">; R<emove > P<ayloadtr>ue/<Payload> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
<QueryParams>
(عنصر ثانوي من <Remove>
)
تزيل هذه السياسة مَعلمات طلب البحث المحدّدة من الطلب. ليس لهذا العنصر أي تأثير في الرد.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة من عناصر <QueryParam> أو مصفوفة فارغة |
العنصر الأصل |
<Remove>
|
العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also b>e an empty< array (Que>ryParam<s/) --> QueryParams >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param ..>. /QueryParams /Remove /AssignMessage
المثال 1
يزيل المثال التالي مَعلمة طلب بحث واحدة من الطلب:
<AssignMessage name="AM-remove-querypara>ms-<1">; Rem<ove Q>ueryParam<s QueryParam n>ame=&qu<ot;qp1">/ < /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
المثال 2
يزيل المثال التالي جميع مَعلمات طلب البحث من الطلب:
<AssignMessage name="AM-remove-querypara>ms-<2">; Rem<ove Qu>ery<Params/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
مثال 3
إذا كانت هناك مَعلمات طلب بحث متعددة تحمل الاسم نفسه، استخدِم البنية التالية:
<AssignMessage name="AM-remove-querypara>ms-<3">; Rem<ove Q>ueryParam<s QueryParam n>ame="<;qp1"/ Qu>eryParam <name="qp2"/ > Q<ueryParam na>me=<"q>p3.<2"/> </QueryPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
يزيل هذا المثال "qp1" و"qp2" والقيمة الثانية من "qp3" من الطلب. إذا كانت السمة "qp3" تتضمّن قيمة واحدة فقط، لن تتم إزالتها.
مثال 4
يزيل المثال التالي مَعلمة طلب البحث apikey
من الطلب:
<AssignMessage name="AM-remove-query-p>ara<m">; R<emove Q>ueryPar<ams QueryParam name>=&quo<t;apikey&quo>t;/< /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
يمكنك استخدام <QueryParams>
فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
<Set>
يضبط هذا العنصر المعلومات في رسالة الطلب أو الاستجابة، والتي يحدّدها العنصر <AssignTo>
. تؤدي السمة <Set>
إلى الكتابة فوق العناوين أو مَعلمات طلب البحث أو النموذج المتوفّرة في الرسالة الأصلية. قد تحتوي العناوين ومعلَمات طلب البحث والنماذج
في رسالة HTTP على قيم متعددة. لإضافة قيم إضافية لعنوان أو مَعلمة، استخدِم العنصر <Add>
بدلاً من ذلك.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | نوع معقّد |
العنصر الأصل |
<AssignMessage>
|
العناصر الفرعية |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
يستخدم العنصر <Set>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am < ... /FormParams > Headers < Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader ... /Headers Pathpath/Path Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot; < variableSuffix="suffix&>quot;new_payload</Payload > QueryParams < QueryPa>ram n<ame="qu>eryparam_name"queryparam_<value/QueryPa>ram < ... > /QueryParams ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e < V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb Version[1.0|1.1|{variable}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي عنوانًا محدّدًا. عند إرفاق هذه السياسة في مسار الطلب، سيسمح ذلك للنظام المصدر بتلقّي عنوان إضافي لم يتم تضمينه في الطلب الوارد الأصلي.
<AssignMessage name="AM-Set-He>ade<r&q>uot; < Set > Header<s Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader> < /Heade>rs /S<et Assi>g<nTorequest/Ass>ignTo /AssignMessage
المثال 2
يستبدل المثال التالي حمولة الاستجابة، بالإضافة إلى العنوان Content-Type
.
<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot; < Set Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load /S>e<t AssignTore>sponse/AssignTo /AssignMessage
<FormParams>
(عنصر ثانوي من <Set>
)
تستبدل هذه السمة مَعلمات النموذج الحالية في الطلب بالقيم الجديدة التي تحدّدها. ليس لهذا العنصر أي تأثير في الردّ.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة عناصر <FormParam> |
العنصر الأصل |
<Set>
|
العناصر الفرعية |
<FormParam> |
يستخدم العنصر <FormParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam .>.. /FormParams /Set /AssignMessage
المثال 1
يضبط المثال التالي مَعلمة نموذج باسم "myparam" على قيمة المتغيّر request.header.myparam
في طلب جديد ومخصّص:
<AssignMessage name="AM-set-formpara>ms-<1&q>uot; < Set >FormPar<ams FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m > /<FormParams /Set AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
يمكنك استخدام <FormParams>
فقط عند استيفاء المعايير التالية:
- فعل HTTP: POST
- نوع الرسالة: طلب
إذا حدّدت مَعلمات نموذج فارغة في سياستك (<Add><FormParams/></Add>
)، لن تضيف السياسة أي مَعلمات نموذج. وهذا الإجراء مماثل لحذف <FormParams>
.
تغيّر <Set>
Content-Type
الرسالة إلى
"application/x-www-form-urlencoded" قبل إرسالها إلى نقطة النهاية المستهدَفة.
<Headers>
(عنصر ثانوي من <Set>
)
تتم الكتابة فوق عناوين HTTP الحالية في الطلب أو الاستجابة، والتي يتم تحديدها من خلال العنصر <AssignTo>
.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة عناصر <Header> |
العنصر الأصل |
<Set>
|
العناصر الفرعية |
<Header> |
يستخدم العنصر <Headers>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name&q<uot; Set Headers > Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header > ... /Headers /Set /AssignMessage
المثال 1
يضبط المثال التالي العنوان x-ratelimit-remaining
على قيمة المتغيّر ratelimit.Quota-1.available.count
:
<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot; < Set > Head<ers Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader> < /Heade>rs /Se<t Assig>n<Toresponse/Ass>ignTo /AssignMessage
في حال تحديد عناوين فارغة في سياستك (<Set><Headers/></Set>
)، لن تضبط السياسة أي عناوين. سيكون لهذا الإجراء التأثير نفسه الذي يحدث عند حذف <Headers>
.
<Path>
(عنصر ثانوي من <Set>
)
<Payload>
(عنصر ثانوي من <Set>
)
تحدّد هذه السمة نص الرسالة لطلب أو استجابة، ويتم تحديدها من خلال العنصر <AssignTo>
. يمكن أن يكون الحمولة أي نوع محتوى صالح، مثل نص عادي أو JSON أو XML.
القيمة التلقائية | سلسلة فارغة |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<Set>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Payload>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name" Set Payload contentType="content_type" variablePrefix=>"prefi<x"<>/span> < > <variableSuffix>="suffix"new_payload/Payload /Set /AssignMessage
المثال 1
يضبط المثال التالي حمولة نص عادي:
<AssignMessage name="set-paylo>ad-<1&q>uot; < Set Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload > /Set /AssignMessage
المثال 2
يضبط المثال التالي حمولة JSON:
<AssignMessage name="set-paylo>ad-<2&q>uot; < Set Payload contentType="ap>plication/json" {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"} /Payload /Set /AssignMessage
المثال 3
يدرج المثال التالي قيم المتغيرات في الحمولة من خلال تضمين أسماء المتغيرات بين أقواس معقوفة:
<AssignMessage name="set-paylo>ad-<3&q>uot; < Set Payload contentType="ap>plication/json" {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"} /Payload /Set /AssignMessage
في الإصدارات السابقة من Apigee، لم يكن بإمكانك استخدام أقواس معقوفة للإشارة إلى مراجع المتغيرات ضمن حمولات JSON. في تلك الإصدارات، كان عليك استخدام السمتَين variablePrefix
وvariableSuffix
لتحديد أحرف الفواصل، واستخدامها لتضمين أسماء المتغيرات، على النحو التالي:
<AssignMessage name="set-payloa>d-3<b&q>uot; < Set Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"} /Payload /Set /AssignMessage
لا تزال هذه البنية القديمة صالحة.
المثال 4
يتم التعامل مع محتوى <Payload>
كنموذج رسالة. وهذا يعني أنّ سياسة AssignMessage تستبدل المتغيّرات المضمّنة بين أقواس معقوفة بقيمة المتغيّرات المشار إليها في وقت التشغيل.
يستخدم المثال التالي بناء جملة الأقواس المعقوفة لضبط جزء من الحمولة على قيمة متغيرة:
<AssignMessage name="set-paylo>ad-<4&q>uot; < Set Payload contentType=>"t<ext/>xml"< > r<oot> <e1>sunday</e1> <e2>funday</e2> < e3{>var1}</e3 > /<root> < /Payload > /Set /AssignMessage
يوضّح الجدول التالي سمات النوع <Payload>
:
السمة | الوصف | التواجد في المنزل | النوع |
---|---|---|---|
contentType |
في حال تحديدها، يتم تعيين قيمة |
اختياري | سلسلة |
variablePrefix |
تحدّد هذه السمة بشكل اختياري المحدّد الأوّل في متغيّر التدفق. القيمة التلقائية هي "{". لمزيد من المعلومات، اطّلِع على مرجع متغيرات التدفق. | اختياري | Char |
variableSuffix |
تحدّد هذه السمة بشكل اختياري المحدّد اللاحق في متغيّر التدفق. القيمة التلقائية هي "}". لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيرات التدفق. | اختياري | Char |
<QueryParams>
(عنصر ثانوي من <Set>
)
تستبدل هذه السمة مَعلمات طلب البحث الحالية في الطلب بقيم جديدة. ليس لهذا العنصر أي تأثير في الرد.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | مصفوفة عناصر <QueryParam> |
العنصر الأصل |
<Set>
|
العناصر الفرعية |
<QueryParam> |
يستخدم العنصر <QueryParams>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_nam>e"< Set QueryParams Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param ..>. /QueryParams /Set /AssignMessage
المثال 1
يضبط المثال التالي مَعلمة طلب البحث "address" على قيمة المتغيّر request.header.address
:
<AssignMessage name="AM-set-querypara>ms<-1&>quot;< Set Q>ueryPar<ams QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram< > </QueryParams > /Set /AssignMessage
يمكنك استخدام <QueryParams>
فقط عند استيفاء المعايير التالية:
- فعل HTTP: GET
- نوع الرسالة: طلب
إذا حدّدت مَعلمات طلب بحث فارغة في سياستك (<Set><QueryParams/></Set>
)، لن تضبط السياسة أي مَعلمات طلب بحث. وهذا الإجراء مماثل لحذف <QueryParams>
.
<ReasonPhrase>
(عنصر ثانوي من <Set>
)
تضبط هذه السمة عبارة السبب في الردّ. يتم ذلك عادةً لتصحيح الأخطاء مع <StatusCode>
. ليس لهذا العنصر أي تأثير في الطلب.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة |
العنصر الأصل |
<Set>
|
العناصر الفرعية | بدون |
يستخدم العنصر <ReasonPhrase>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name>" Set ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase /Set /AssignMessage
المثال 1
يحدّد المثال التالي عبارة سبب بسيطة:
<AssignMessage name="set-reasonphra>se-<1&q>uot; < Set Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase< /Set AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/ /AssignMessage
المثال 2
يتم التعامل مع محتوى <ReasonPhrase>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر المشار إليه، كما يوضّح المثال التالي:
<AssignMessage name="AM-set-reasonphra>se-<2&q>uot; < Set Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
يمكنك استخدام <ReasonPhrase>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<StatusCode>
(عنصر ثانوي من <Set>
)
تضبط هذه السمة رمز الحالة في الردّ. ليس لهذا العنصر أي تأثير في الطلب.
القيمة التلقائية | 200 (عند ضبط السمة createNew في <AssignTo> على "صحيح") |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الأصل |
<Set>
|
العناصر الفرعية | بدون |
يستخدم العنصر <StatusCode>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me" Set StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode /Set /AssignMessage
مثال 1
يضبط المثال التالي رمز حالة بسيطًا:
<AssignMessage name="AM-set-statuscode>-40<4&q>uot; < Set >Sta<tusCode404/>Sta<tusC>ode< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
مثال 2
يتم التعامل مع محتوى <StatusCode>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المشار إليه، كما يوضّح المثال التالي:
<AssignMessage name="set-statusco>de-<2&q>uot; < Set >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
يمكنك استخدام <StatusCode>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: ردّ
<Verb>
(عنصر ثانوي من <Set>
)
تضبط هذه السمة فعل HTTP في الطلب. ليس لهذا العنصر أي تأثير في الردّ.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الأصل |
<Set>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Verb>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;pol>icy_name" Set Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي فعلاً بسيطًا على الطلب:
<AssignMessage name="AM-set-ve>rb-<1&q>uot; < Se>t < Ver>bPO<ST/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
المثال 2
يتم التعامل مع محتوى <Verb>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر المضمّن بين قوسين معقوفين بقيمة المتغيّر المشار إليه في وقت التشغيل.
يستخدم المثال التالي متغيّرًا لتعبئة فعل:
<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot; < Se>t Verb{my<_vari>abl<e}/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
يمكنك استخدام <Verb>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
<Version>
(عنصر ثانوي من <Set>
)
تضبط هذه السمة إصدار HTTP في الطلب. ليس لهذا العنصر أي تأثير في الردّ.
القيمة التلقائية | timing fixed in amara |
هل هو مطلوب؟ | اختياري |
النوع | سلسلة أو variable |
العنصر الأصل |
<Set>
|
العناصر الفرعية | بدون |
يستخدم العنصر <Version>
البنية التالية:
البنية
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name" Set < Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb /Set /AssignMessage
المثال 1
يضبط المثال التالي رقم الإصدار على "1.1":
<AssignMessage name="AM-set-versi>on-<1&q>uot; < Set > <Version1>.1/<Vers>io<n /Set /Ass>ignMessage
مثال 2
يستخدم المثال التالي متغيّرًا بين قوسين معقوفين لضبط رقم الإصدار:
<AssignMessage name="AM-set-versi>on-<2&q>uot; < Set > Version{m<y_versio>n}/<Vers>ion< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
يتم التعامل مع محتوى <Version>
كنموذج رسالة. وهذا يعني أنّه سيتم استبدال اسم المتغيّر a
المضمّن بين قوسين معقوفين في وقت التشغيل بقيمة المتغيّر
المرجعي.
يمكنك استخدام <Version>
فقط عند استيفاء المعايير التالية:
- نوع الرسالة: طلب
إنشاء رسائل طلبات مخصّصة
يمكنك استخدام سياسة AssignMessage لإنشاء رسالة طلب مخصّصة. بعد إنشاء طلب مخصّص، يمكنك استخدامه بالطرق التالية:
- الوصول إلى متغيراته في سياسات أخرى
- تمريرها إلى خدمة خارجية
لإنشاء رسالة طلب مخصّصة، استخدِم العنصر <AssignTo>
في سياسة AssignMessage. اضبط قيمة createNew
على "true" وحدِّد اسم الرسالة الجديدة في نص العنصر، كما هو موضّح في المثال التالي:
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
بشكلٍ تلقائي، لا يتّخذ Edge أي إجراء بشأن رسالة الطلب المخصّصة. بعد إنشائه، سيواصل Edge تنفيذ الخطوات باستخدام الطلب الأصلي. لاستخدام الطلب المخصّص، أضِف سياسة، مثل سياسة ServiceCallout، إلى الخادم الوكيل الذي يمكنه تمرير الطلب المخصّص إلى خدمة خارجية.
تنشئ الأمثلة التالية رسائل طلب مخصّصة:
المثال 1
ينشئ المثال التالي عنصر طلب مخصّصًا باستخدام Assign Message:
<AssignMessage name="AssignMessa>ge-<3" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo Copy Headers > <Header n>ame<=&quo>t;u<ser>-agen<t"/ > /Head<ers /Copy Set Que>ryParams QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam /QueryParams > VerbG<ET/Verb /Set IgnoreUnr>e<solvedVariable>sfalse /IgnoreUnresolvedVariables /AssignMessage
في هذا المثال:
- تنشئ هذه السمة عنصر رسالة طلب جديدًا باسم "MyCustomRequest".
- في MyCustomRequest، تنصّ هذه السياسة على ما يلي:
- ينسخ قيمة عنوان HTTP
user-agent
من الطلب الوارد إلى الرسالة الجديدة. بما أنّ<Copy>
يستخدم مرجعًا مطلقًا لمتغير التدفقuser-agent
، ليس من الضروري تحديد السمةsource
لـ<Copy>
. - تضبط هذه السمة مَعلمة طلب البحث
address
في الرسالة المخصّصة على قيمة مَعلمة طلب البحثaddy
في الطلب الوارد. - تضبط هذه السمة فعل HTTP على
GET
.
- ينسخ قيمة عنوان HTTP
- يضبط
<IgnoreUnresolvedVariables>
على "false". عندما تكون قيمة<IgnoreUnresolvedVariables>
هي "false"، إذا لم يكن أحد المتغيرات التي تحاول السياسة إضافتها متوفّرًا، سيتوقّف Edge عن المعالجة في مسار واجهة برمجة التطبيقات.
المثال 2
في ما يلي مثال آخر يوضّح كيفية إنشاء عنصر طلب مخصّص باستخدام Assign Message:
<AssignMessage name="AssignMessa>ge-<2" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o Set VerbPOST/Verb >Payload< conten><tType=&qu>ot;<text/xml&q><uot; > re<questope>rat<ion1>0<5/operation/re>quest /Payload /Set /AssignMessage
ينشئ هذا المثال طلبًا مخصّصًا جديدًا باسم "partner.request". بعد ذلك، يتم ضبط
<Verb>
و<Payload>
على الطلب الجديد.
يمكنك الوصول إلى رسالة طلب مخصّصة في سياسة AssignMessage أخرى تحدث لاحقًا في التدفق. يحصل المثال التالي على قيمة عنوان user-agent
لرسالة الطلب المخصّصة:
<AssignMessage name="custom-request-1-ac>ces<s" D>isplayNamecustom-reques<t-1-access/D>isp<layName > AssignTopartn<er.reques>t/A<ssi>gnTo < Set > Head<ers Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader> < /Headers > /Set /AssignMessage
الفيديوهات
شاهِد الفيديوهات التالية لمعرفة المزيد من المعلومات حول سياسة AssignMessage.
فيديو | الوصف |
---|---|
لماذا سياسة "تعيين رسالة"؟ | تعرَّف على مزايا استخدام سياسة AssignMessage لتعديل طلب أو ردّ واجهة برمجة التطبيقات بدون تعديل الرمز البرمجي للخادم الخلفي. |
نسخ عناصر واجهة برمجة التطبيقات باستخدام سياسة AssignMessage | نسخ عناصر من طلب أو ردّ من واجهة برمجة التطبيقات وإنشاء طلب أو ردّ جديد باستخدام سياسة AssignMessage |
إزالة عناصر API باستخدام سياسة AssignMessage | يمكنك إزالة عناصر واجهة برمجة التطبيقات وتعديلها قبل وصولها إلى الخلفية المستهدَفة باستخدام سياسة AssignMessage. |
إضافة عناصر واجهة برمجة التطبيقات وتحديدها باستخدام سياسة AssignMessage | تغيير طلب بيانات واجهة برمجة التطبيقات أو الردّ عليها من خلال إضافة مَعلمات طلب البحث أو العناوين أو مَعلمات النموذج أو الحِملات باستخدام سياسة AssignMessage |
إنشاء متغيّرات مخصّصة باستخدام سياسة AssignMessage | يمكنك ضبط متغيرات المسار المخصّص باستخدام سياسة AssignMessage والاستفادة من المتغيرات في سياسات أخرى في خادم API الوكيل. |
إنشاء عناصر طلب أو رد جديدة باستخدام سياسة AssignMessage | إنشاء عناصر طلب أو استجابة جديدة لواجهة برمجة التطبيقات باستخدام سياسة AssignMessage في وقت تشغيل واجهة برمجة التطبيقات |
إنشاء واجهة برمجة تطبيقات وهمية باستخدام سياسة AssignMessage | أنشئ واجهة برمجة تطبيقات REST وهمية بسيطة من خلال إضافة سياسة AssignMessage في مسار الرد. |
ضبط الحمولة أو تعديلها باستخدام سياسة AssignMessage | تحويل طلب REST إلى طلب SOAP من خلال ضبط حمولة SOAP باستخدام سياسة AssignMessage في وقت تشغيل واجهة برمجة التطبيقات |
رموز الخطأ
يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تم ضبطها من خلال Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. من المهم معرفة هذه المعلومات إذا كنت تضع قواعد خطأ التعامل مع الأخطاء. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على ما تحتاج إلى معرفته حول أخطاء السياسة والتعامل مع المعالجة والأخطاء.
أخطاء بيئة التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
رمز الخطأ | رموز حالة HTTP | السبب | إصلاح |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | لم تتمكّن السياسة من ضبط متغيّر. اطّلِع على سلسلة الخطأ لاسم المتغير الذي لم يتم تحليله. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
يحدث هذا الخطأ في حال ضبط السمة تمثِّل متغيّرات نوع الرسالة طلبات واستجابات HTTP كاملة. شبكة Edge المدمجة
متغيرات التدفق |
build |
steps.assignmessage.UnresolvedVariable |
500 |
يحدث هذا الخطأ إذا كان المتغير المحدَّد في السياسة "تعيين رسالة" أيًا مما يلي:
|
build |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
اسم الخطأ | السبب | إصلاح |
---|---|---|
InvalidIndex |
إذا تم تحديد الفهرس في عنصرَي <Copy> و/أو <Remove> في "تعيين رسالة"
القيمة 0 أو رقم سالب، ثم يتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.
|
build |
InvalidVariableName |
إذا كان العنصر الفرعي <Name> فارغًا أو غير محدّد في العنصر <AssignVariable> ،
فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات نظرًا لعدم وجود اسم متغير صالح
التي يجب تعيين قيمة لها. يجب إدخال اسم متغيّر صالح.
|
build |
InvalidPayload |
الحمولة المحددة في السياسة غير صالحة. |
متغيّرات الأخطاء
يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى ظهور خطأ في وقت التشغيل. لمزيد من المعلومات يمكنك الاطّلاع على ما تحتاج إلى معرفتها حول أخطاء السياسة.
المتغيرات | المكان | مثال |
---|---|---|
fault.name="fault_name" |
fault_name هو اسم الخطأ، كما هو موضَّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name هو الاسم الذي يحدّده المستخدم للسياسة التي أدّت إلى حدوث الخطأ. | assignmessage.AM-SetResponse.failed = true |
مثال على استجابة الخطأ
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
مثال على قاعدة الخطأ
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
المخططات
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd
). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.
مواضيع ذات صلة
تتوفّر عينات عملية لسياسة AssignMessage في عينات "منصّة واجهة برمجة التطبيقات".
للاطّلاع على مثال أكثر تقدّمًا حول كيفية تجاهل target.url
من
ProxyEndpoint، يُرجى الاطّلاع على مقالة "منتدى Apigee" هذه.
للاطّلاع على "مسار محدّد" أثناء التنفيذ في سياسة ServiceCallout، يمكنك الاطّلاع على مثال "التعلّم من خلال الممارسة" في نماذج Apigee على GitHub. ما عليك سوى استنساخ المستودع واتّباع التعليمات الواردة في هذا الموضوع. يستخدم المثال سياسة AssignMessage لضبط مسار الطلب، ثم يستخدم سياسة Service Callout لإرسال الطلب إلى خدمة خارجية.