أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
تنفّذ سياسة SOAPMessageValidation ما يلي:
- التحقّق من صحة أي رسالة XML وفقًا لمخططات XSD
- التحقّق من صحة رسائل SOAP استنادًا إلى تعريف WSDL
- تحديد صحة تنسيق رسائل JSON وXML
على الرغم من أنّ اسم هذه السياسة في واجهة المستخدم هو "التحقّق من صحة رسائل SOAP"، إلا أنّ السياسة تتحقّق من صحة أكثر من مجرد رسائل SOAP. يشير هذا القسم إلى السياسة باسم "سياسة التحقّق من صحة الرسائل".
العنصر <MessageValidation>
تحدّد هذه السمة سياسة التحقّق من صحة الرسائل.
| القيمة التلقائية | راجِع علامة التبويب السياسة التلقائية أدناه. |
| هل هو مطلوب؟ | اختياري |
| النوع | عنصر معقّد |
| العنصر الأصل | timing fixed in amara |
| العناصر الفرعية |
<DisplayName><Element><ResourceURL><SOAPMessage><Source> |
البنية
يستخدم العنصر <MessageValidation> البنية التالية:
<MessageValidation
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name"
>
<!-- All MessageValidation child elements are optional -->
<DisplayName>policy_display_name</DisplayName>
<Element namespace="element_namespace">element_to_validate</Element>
<SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/>
<Source>message_to_validate</Source>
<ResourceURL>validation_WSDL_or_XSD</ResourceURL>
</MessageValidation>السياسة التلقائية
يعرض المثال التالي الإعدادات التلقائية عند إضافة سياسة "التحقّق من صحة الرسالة" إلى التدفق في واجهة مستخدم Edge:
<MessageValidation continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://sample.com">sampleObject</Element> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
يتضمن هذا العنصر السمات التالية الشائعة لجميع السياسات:
| السمة | تلقائي | مطلوب | الوصف |
|---|---|---|---|
name |
لا ينطبق | مطلوب |
الاسم الداخلي للسياسة. يمكن أن تحتوي قيمة السمة اختياريًا، يمكنك استخدام العنصر |
continueOnError |
false | إجراء اختياري | يمكنك ضبطها على "خطأ" لعرض رسالة خطأ عند تعذّر تنفيذ إحدى السياسات. ويُعدّ هذا سلوكًا متوقعًا في معظم السياسات. يمكنك ضبط القيمة على "صحيح" للاستمرار في تنفيذ العملية حتى بعد تعذُّر تنفيذ سياسة. |
enabled |
صحيح | إجراء اختياري | اضبط القيمة على "true" لفرض السياسة. اضبط هذه القيمة على "false" على "إيقاف" السياسة. لن يتم فرض السياسة حتى إذا ظلت مرتبطة بتدفق. |
async |
false | منهي العمل به | تم إيقاف هذه السمة نهائيًا. |
أمثلة
تعرض الأمثلة التالية بعض الطرق التي يمكنك من خلالها استخدام سياسة "التحقّق من صحة الرسائل":
1: التحقّق من صحة XSD
يمكنك استخدام سياسة "التحقّق من صحة الرسالة" للتحقّق من صحة حمولة طلب رسالة XML مقارنةً بمخطط XSD.
- أنشئ ملف موارد جديدًا بتنسيق XSD. على سبيل المثال، "note-schema.xsd":
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
- أضِف سياسة "التحقّق من صحة رسائل SOAP" إلى مرحلة ما قبل التدفق لنقطة نهاية الخادم الوكيل:
- حدِّد موقع ملف موارد XSD باستخدام العنصر
<ResourceURL>. على سبيل المثال:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- أزِل العنصرَين
<SOAPMessage>و<Element>من تعريف السياسة.
يجب أن يبدو تعريف السياسة على النحو التالي:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation> - حدِّد موقع ملف موارد XSD باستخدام العنصر
- أرسِل طلب
POSTإلى خادم وكيل واجهة برمجة التطبيقات مع ملف XML كحمولة الرسالة، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> </note>'
لاحظ أنّ العنوان
Content-typeمضبوط على "application/xml".يمكنك أيضًا إنشاء ملف بيانات للحِمل وربطه بأمر مشابه لما يلي:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
من المفترض أن تتلقّى الرد HTTP 200. استنادًا إلى نقطة النهاية المستهدَفة، قد تتلقّى تفاصيل إضافية حول الطلب. على سبيل المثال، إذا كنت تستخدم
http://httpbin.org/post كنقطة نهاية مستهدَفة وتحدّد الناتج -v
(المفصّل)، يجب أن تكون الاستجابة مشابهة لما يلي:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
للتحقّق من أنّ عملية التحقّق من صحة XSD تعمل بشكل سليم، حاوِل إدراج علامة أخرى في نص طلبك. على سبيل المثال:
curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> <badTag>Not good</badTag> </note>'
من المفترض أن يظهر لك خطأ في التحقّق.
2: التحقّق من صحة SOAP
يمكنك استخدام سياسة "التحقّق من صحة الرسالة" للتحقّق من صحة حمولة طلب رسالة SOAP مقارنةً بملف WSDL.
- أنشئ ملف موارد جديدًا بتنسيق WSDL. على سبيل المثال، "example-wsdl.wsdl":
- أضِف سياسة "التحقّق من صحة رسائل SOAP" إلى مرحلة ما قبل التدفق لنقطة نهاية الخادم الوكيل:
- اضبط السمة
versionللعنصر<SOAPMessage>على إصدار بروتوكول SOAP الذي تريد التحقّق من صحته. على سبيل المثال، "1.1":... <SOAPMessage version="1.1"/> ...
- اضبط قيمة العنصر
<Element>على العنصر الذي تريد التحقّق من صحته:... <Element namespace="https://example.com/gateway">getID</Element> ...
تحدّد
<Element>العنصر الفرعي الأول ضمن العنصر<Body>في حزمة طلب SOAP.اضبط السمة
namespaceعلى مساحة الاسم الخاصة بهذا العنصر الفرعي. - حدِّد موقع ملف مصدر WSDL باستخدام العنصر
<ResourceURL>. على سبيل المثال:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
يجب أن يبدو تعريف السياسة على النحو التالي:
<MessageValidation continueOnError="false" enabled="true" name="validateSOAPRequest"> <DisplayName>My SOAP Validator</DisplayName> <Properties/> <Source>request</Source> <SOAPMessage version="1.1"/> <Element namespace="https://example.com/gateway">getID</Element> <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> </MessageValidation> - اضبط السمة
- أرسِل طلب
POSTإلى خادم وكيل واجهة برمجة التطبيقات مع تضمين حزمة SOAP كبيانات أساسية للرسالة، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prox="https://example.com/gateway" xmlns:typ="https://example.com/gateway/types"> <soapenv:Header/> <soapenv:Body> <prox:getID> <typ:MyType> <typ:ID>42</typ:ID> </typ:MyType> </prox:getID> </soapenv:Body> </soapenv:Envelope>'
لاحظ أنّ العنوان
Content-typeمضبوط على "application/xml".يمكنك أيضًا إنشاء ملف بيانات للحِمل وربطه بأمر مشابه لما يلي:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
من المفترض أن تتلقّى الرد HTTP 200. استنادًا إلى نقطة النهاية المستهدَفة، قد تتلقّى تفاصيل إضافية حول الطلب. على سبيل المثال، إذا كنت تستخدم
http://httpbin.org/post كنقطة نهاية مستهدَفة، يجب أن يكون الرد مشابهًا لما يلي:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
3: XML/JSON صحيح
يمكنك استخدام سياسة "التحقّق من صحة الرسالة" للتأكّد من أنّ حمولة رسالة JSON أو XML منسّقة بشكل صحيح (وهذا يختلف عن التحقّق من الصحة). تضمن السياسة استيفاء البنية والمحتوى للمعايير المقبولة، بما في ذلك:
- يجب أن يكون هناك عنصر جذر واحد
- لا توجد أحرف غير صالحة في المحتوى
- تكون العناصر والعلامات متداخلة بشكلٍ صحيح
- تطابُق علامات البداية والنهاية
للتأكّد من أنّ حِمل XML أو JSON منسَّق بشكل سليم، اتّبِع الخطوات التالية:
- أضِف سياسة "التحقّق من صحة رسالة SOAP" إلى مرحلة ما قبل التدفق لنقطة نهاية الخادم الوكيل.
- أزِل العناصر
<ResourceURL>و<SOAPMessage>و<Element>من تعريف السياسة.يجب أن يبدو تعريف السياسة على النحو التالي:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation> - أرسِل طلب
POSTإلى خادم وكيل لواجهة برمجة التطبيقات، كما هو موضّح في المثال التالي:curl -v -X POST -H 'Content-Type: application/json' http://my-test.apigee.net/v1/xsd-mock -d '{ "note": { "to": "Fred Rogers", "from": "Nick Danger", "header": "Greetings from my neighborhood", "body": "Just writing to say hello." } }'لاحظ أنّ العنوان
Content-typeمضبوط على "application/json".للتحقّق من سلامة تنسيق ملف XML، استخدِم XML كحمولة الرسالة واضبط
Content-typeعلى "application/xml".
من المفترض أن تتلقّى الرد HTTP 200. عند إرسال حمولة رسالة لا تحتوي على XML أو JSON منسّق بشكل صحيح، من المفترض أن تتلقّى الخطأ steps.messagevalidation.Failed.
مرجع العنصر الفرعي
يوضّح هذا القسم العناصر الفرعية من <MessageValidation>.
<DisplayName>
استخدِم هذه السمة بالإضافة إلى السمة name لتصنيف السياسة في أداة تعديل وكيل واجهة مستخدم الإدارة باستخدام اسم مختلف وأكثر طبيعية.
العنصر <DisplayName> مشترك بين جميع السياسات.
| القيمة التلقائية | timing fixed in amara |
| هل هو مطلوب؟ | اختياريّ. في حال حذف <DisplayName>، سيتم استخدام قيمة السمة name الخاصة بالسياسة. |
| النوع | سلسلة |
| العنصر الأصل | <PolicyElement> |
| العناصر الفرعية | بدون |
يستخدم العنصر <DisplayName> البنية التالية:
البنية
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
مثال
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
لا يحتوي العنصر <DisplayName> على أي سمات أو عناصر فرعية.
<Element>
تحدّد هذه السمة العنصر المطلوب التحقّق من صحته في الرسالة. هذا هو العنصر الفرعي الأول ضمن العنصر <Body> في حزمة طلب SOAP.
| القيمة التلقائية | sampleObject |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<MessageValidation>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Element> البنية التالية:
البنية
... <Element namespace="element_namespace">element_to_validate</Element> ...
مثال 1
يحدّد المثال التالي عنصرًا واحدًا يجب التحقّق من صحته:
... <Element namespace="https://example.com/gateway">getID</Element> ...
مثال 2
يمكنك تحديد أكثر من عنصر واحد للتحقّق من صحته من خلال إضافة عناصر <Element> متعددة:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
يحتوي العنصر <Element> على السمات التالية:
| السمة | تلقائي | مطلوب؟ | الوصف |
|---|---|---|---|
namespace |
"http://sample.com" | اختياري | تحدّد مساحة اسم العنصر المطلوب التحقّق من صحته. |
<ResourceURL>
تحدّد هذه السمة مخطّط XSD أو تعريف WSDL الذي سيتم استخدامه للتحقّق من صحة الرسالة المصدر.
| القيمة التلقائية | wsdl://display_name.wsdl |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<MessageValidation>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <ResourceURL> البنية التالية:
البنية
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
أمثلة
بالنسبة إلى ملف XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
بالنسبة إلى WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
يجب أن تشير قيمة <ResourceURL> إلى ملف موارد في خادم وكيل API. ولا يمكن أن يشير إلى موارد خارجية عبر HTTP أو HTTPS.
في حال عدم تحديد قيمة لـ <ResourceURL>، يتم التحقّق من الرسالة للتأكّد من أنّها تتضمّن JSON أو XML منسّقًا بشكل سليم، وذلك إذا كان العنوان Content-type هو "application/json" أو "application/xml" على التوالي.
لا يحتوي العنصر <ResourceURL> على عناصر فرعية أو سمات.
استخدام مخططات XML للتحقّق من الصحة
إذا كان حمولة XML التي تتحقّق من صحتها باستخدام سياسة "التحقّق من صحة الرسائل" تشير إلى مخطّط آخر، عليك إضافة البادئة xsd إلى ملف XSD المُضمَّن في السمة schemaLocation.
يتألف مخطط المثال التالي من عدة ملفات XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="xsd://note-schema.xsd"/>
<xs:include schemaLocation="xsd://letter-schema.xsd"/>
<xs:include schemaLocation="xsd://user-schema.xsd"/>
</xs:schema>استخدام ملفات WSDL للتحقّق من الصحة
يجب أن يحدّد مستند WSDL مخططًا واحدًا على الأقل. وإذا لم يشر إلى مخطط واحد على الأقل، ستتعذّر سياسة التحقّق من صحة الرسالة.
الحدّ الأقصى لعمق الاستيراد لمخطط هو 10. في حال تجاوزت عدد عمليات الاستيراد المتداخلة هذا، ستتعذّر سياسة التحقّق من صحة الرسائل.
<SOAPMessage>
تحدّد هذه السمة إصدار SOAP الذي تتحقّق منه سياسة "التحقّق من صحة الرسائل".
| القيمة التلقائية | timing fixed in amara |
| هل هو مطلوب؟ | اختياري |
| النوع | timing fixed in amara |
| العنصر الأصل |
<MessageValidation>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <SOAPMessage> البنية التالية:
البنية
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
مثال
... <SOAPMessage version="1.1"/> ...
يحتوي العنصر <SOAPMessage> على السمات التالية:
| السمة | تلقائي | مطلوب؟ | الوصف |
|---|---|---|---|
version |
بدون | اختياري | إصدار SOAP الذي تستخدمه هذه السياسة للتحقّق من صحة رسائل SOAP.
القيم الصالحة هي:
|
لمزيد من المعلومات، يُرجى الاطّلاع على من SOAP/1.1 إلى SOAP الإصدار 1.2 في 9 نقاط.
<Source>
تحدّد هذه السمة الرسالة المصدر التي سيتم التحقّق من صحتها. قيمة هذا العنصر هي اسم الرسالة التي تريد التحقّق من صحتها.
في حال عدم ضبط <Source>، سيتم تلقائيًا ضبط هذه السياسة على "message"، ما يشير إلى رسالة الطلب الكاملة (في مسار الطلب) أو رسالة الردّ (في مسار الردّ)، بما في ذلك أي حمولة. يمكنك أيضًا ضبطها بشكل صريح على "طلب" أو "رد" للإشارة إلى الطلب أو الرد.
| القيمة التلقائية | طلب |
| هل هو مطلوب؟ | اختياري |
| النوع | سلسلة |
| العنصر الأصل |
<MessageValidation>
|
| العناصر الفرعية | بدون |
يستخدم العنصر <Source> البنية التالية:
البنية
... <Source>message_to_validate</Source> ...
مثال
... <Source>request</Source> ...
بالإضافة إلى "message" و"request" و "response"، يمكنك ضبط قيمة <Source> على اسم أي رسالة في مسارك. في هذه الحالة، عليك إنشاء رسالة مخصّصة بهذا الاسم في مسارك قبل تنفيذ هذه السياسة. وإلا سيظهر لك خطأ.
إذا تعذّر تحديد قيمة <Source> في مسار الرسالة أو تم تحديدها على أنّها نوع غير نوع الرسالة، سيحدث أحد الإجراءَين التاليَين:
- في حال كانت القيمة فارغة: يعرض Edge الخطأ
steps.messagevalidation.SourceMessageNotAvailable. - إذا كان نوعًا غير نوع الرسالة: يعرض Edge الخطأ
steps.messagevalidation.NonMessageVariable.
لا يحتوي العنصر <Source> على أي سمات أو عناصر فرعية.
رموز الخطأ
تتّبع الأخطاء التي يتم عرضها من سياسات Edge تنسيقًا متسقًا كما هو موضّح في مرجع رموز الخطأ.
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
This error occurs if a variable specified in the
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
This error occurs if the Message type variables represent entire HTTP requests and responses. The built-in Edge
flow variables |
build |
steps.messagevalidation.Failed |
500 | This error occurs if the SOAPMessageValidation policy fails to validate the input message payload against the XSD schema or WSDL definition. It will also occur if there is malformed JSON or XML in the payload message. | build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
InvalidResourceType |
The <ResourceURL> element in the SOAPMessageValidation policy is set to a resource type
not supported by the policy.
|
build |
ResourceCompileFailed |
The resource script referenced in the <ResourceURL> element of the SOAPMessageValidation
policy contains an error that prevents it from compiling.
|
build |
RootElementNameUnspecified |
The <Element> element in the SOAPMessageValidation policy does not contain the root
element's name. |
build |
InvalidRootElementName |
The <Element> element in the SOAPMessageValidation policy contains a root element name
that does not adhere to XML rules for valid element naming. |
build |
المخططات
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.