أحدث البرامج التعليمية وتطوير الشبكة
 

XML Soap


  • الصابون لتقف على كائن بسيط وصول P rotocol
  • SOAP هو بروتوكول الاتصال التطبيق
  • الصابون هو تنسيق لإرسال واستقبال الرسائل
  • الصابون هو منصة مستقلة
  • ويستند الصابون على XML
  • الصابون هو توصية W3C

لماذا الصابون؟

ومن المهم لتطبيقات الويب لتكون قادرة على التواصل عبر الإنترنت.

أفضل وسيلة للاتصال بين التطبيقات هي عبر HTTP، لأن ويدعم HTTP من قبل جميع متصفحات الإنترنت والخوادم. تم إنشاء الصابون لتحقيق ذلك.

يوفر الصابون وسيلة للاتصال بين التطبيقات التي تعمل على أنظمة تشغيل مختلفة، مع تقنيات مختلفة ولغات البرمجة.


الصابون لبنات البناء

رسالة SOAP هي وثيقة XML العادية التي تحتوي على العناصر التالية:

  • عنصر مغلف التي تحدد وثيقة XML كرسالة الصابون
  • وثمة عنصر رأس يحتوي على معلومات رأس
  • وثمة عنصر الجسم التي تحتوي على الدعوة والاستجابة المعلومات
  • وثمة عنصر خطأ تحتوي على أخطاء ومركز المعلومات

جميع العناصر يتم الإعلان أعلاه في مساحة الاسم الافتراضي للغلاف الصابون:

http://www.w3.org/2003/05/soap-envelope/

ومساحة الاسم الافتراضي لترميز الصابون وأنواع البيانات:

http://www.w3.org/2003/05/soap-encoding


قواعد النحو

وهنا بعض قواعد النحو الهامة:

  • يجب ترميز رسالة الصابون باستخدام XML
  • رسالة SOAP يجب استخدام مساحة الاسم صابون مغلف
  • رسالة SOAP يجب استخدام مساحة الصابون ترميز
  • رسالة SOAP يجب أن لا يتضمن أي إشارة DTD
  • يجب أن لا تحتوي رسالة SOAP معالجة XML تعليمات

هيكل عظمي الصابون رسالة

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

مغلف العنصر الصابون

العنصر الصابون المغلف المطلوب هو العنصر الجذر من رسالة SOAP. ويعرف هذا العنصر وثيقة XML كرسالة SOAP.

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

وXMLNS: الصابون النطاق

لاحظ XMLNS: مساحة الصابون في المثال أعلاه. وينبغي أن يكون دائما قيمة: "http://www.w3.org/2003/05/soap-envelope/" .

يحدد مساحة مغلف بمثابة مغلف SOAP.

إذا تم استخدام مساحة اسم مختلف، وتطبيق بإنشاء خطأ ويتجاهل الرسالة.


و encodingStyle سمة

و encodingStyle يستخدم سمة لتحديد أنواع البيانات المستخدمة في الوثيقة. قد تظهر هذه السمة على أي عنصر الصابون، وينطبق على محتويات العنصر وجميع العناصر التابعة.

رسالة الصابون لا يوجد لديه الترميز الافتراضي.

بناء الجملة

soap:encodingStyle="URI"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

رأس العنصر الصابون

اختياري عنصر رأس الصابون يحتوي على المعلومات الخاصة بالتطبيق (like authentication, payment, etc) حول رسالة SOAP.

إذا كان العنصر رأس موجودا، يجب أن يكون أول عنصر تابع للعنصر مغلف.

Note: جميع العناصر التابعة الفورية لعنصر رأس يجب أن يكون، مساحة المؤهلين.

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

على سبيل المثال يحتوي فوق رأس مع "Trans" عنصر، وهو "mustUnderstand" السمة بقيمة 1، وقيمة 234.

ويعرف الصابون ثلاث صفات في مساحة الاسم الافتراضي. هذه الصفات هي: mustUnderstand، الفاعل، وencodingStyle.

سمات محددة في رأس الصابون وتعرف كيف مستلم يجب معالجة الرسالة SOAP.


و mustUnderstand سمة

السمة الصابون mustUnderstand يمكن استخدامها للإشارة إلى ما إذا كان دخول رأس إلزامية أو اختيارية بالنسبة للمتلقي لمعالجة.

إذا قمت بإضافة mustUnderstand = "1" إلى عنصر تابع للعنصر رأس فإنه يشير إلى أن المتلقي معالجة رأس يجب أن تعترف عنصر. إذا كان المتلقي لا تعترف عنصر فسوف تفشل عند معالجة رأس.

بناء الجملة

soap:mustUnderstand="0|1"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

و actor سمة

قد يسافر رسالة الصابون من المرسل إلى المتلقي عن طريق تمرير النهاية مختلفة على طول مسار الرسالة. ومع ذلك، لا يمكن أن يكون الغرض جميع أجزاء من رسالة الصابون لنقطة النهاية في نهاية المطاف، بدلا من ذلك، قد يكون الهدف واحد أو أكثر من نقاط النهاية على مسار الرسالة.

يتم استخدام السمة الصابون الفاعل لمعالجة عنصر رأس إلى نقطة نهاية محددة.

بناء الجملة

soap:actor="URI"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:actor="http://www.w3ii.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

و encodingStyle سمة

و encodingStyle يستخدم سمة لتحديد أنواع البيانات المستخدمة في الوثيقة. قد تظهر هذه السمة على أي عنصر الصابون، وأنه سيتم تطبيقها على محتويات هذا العنصر وجميع العناصر التابعة.

رسالة الصابون لا يوجد لديه الترميز الافتراضي.

بناء الجملة

soap:encodingStyle="URI"

العنصر الجسم الصابون

يحتوي على عنصر صابون الجسم المطلوبة رسالة SOAP الفعلية المخصصة لنقطة النهاية النهائية للرسالة.

قد تكون عناصر تابعة الفورية للعنصر صابون الجسم، مساحة المؤهلين.

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3ii.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

في المثال أعلاه يطلب سعر التفاح. لاحظ أن م: GetPrice وعناصر البند أعلاه هي العناصر الخاصة بالتطبيق. أنها ليست جزءا من مساحة SOAP.

رد الصابون يمكن أن ننظر بشيء من هذا القبيل:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


على خطأ العنصر الصابون

يتم استخدام اختياري عنصر خطأ الصابون للإشارة إلى رسائل الخطأ.

العنصر خطأ الصابون يحمل أخطاء ومعلومات الحالة لرسالة SOAP.

إذا كان العنصر خطأ غير موجود، يجب أن تبدو وكأنها عنصر تابع للعنصر الجسم. وثمة عنصر خطأ يمكن أن تظهر إلا مرة واحدة في رسالة SOAP.

العنصر خطأ الصابون لديه العناصر الفرعية التالية:

الفرعي العنصر وصف
<faultcode> مدونة لتحديد الخطأ
<faultstring> شرح مقروء الإنسان للخطأ
<faultactor> معلومات حول من تسبب في خطأ يحدث
<detail>

يحمل تطبيق معين معلومات خطأ تتعلق عنصر الجسم

رموز خطأ الصابون

قيم faultcode المحددة أدناه يجب أن تستخدم في العنصر faultcode عندما تصف أخطاء:

خطأ وصف
VersionMismatch العثور على مساحة اسم غير صالح للعنصر الصابون مغلف
MustUnderstand عنصر الطفل الفوري لعنصر رأس، مع mustUnderstand تعيين سمة إلى "1" ، لم يفهم
Client وقد شكلت الرسالة بشكل غير صحيح أو يحتوي على معلومات غير صحيحة
Server كانت هناك مشكلة مع الملقم بحيث الرسالة لا يمكن أن يستمر

بروتوكول HTTP

يتصل HTTP عبر TCP / IP. يتصل عميل HTTP إلى ملقم HTTP باستخدام TCP. بعد تأسيس اتصال، يمكن للعميل إرسال رسالة طلب HTTP إلى الملقم:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

ثم يعالج ملقم الطلب ويرسل استجابة HTTP إلى العميل. رد يحتوي على رمز الحالة تشير إلى حالة الطلب:

200 OK
Content-Type: text/plain
Content-Length: 200

في المثال أعلاه، عاد الخادم رمز حالة من 200. هذا هو رمز النجاح القياسي لHTTP.

إذا كان الخادم لا يمكن فك هذا الطلب، فإنها يمكن أن يكون شيء عاد كما يلي:

400 Bad Request
Content-Length: 0

الصابون التجليد

يعرف مواصفات الصابون هيكل الرسائل الصابون، وليس كيف يتم تبادلها. يتم تعبئة هذه الفجوة من خلال ما يسمى "SOAP Bindings" . الارتباطات الصابون هي الآليات التي تسمح للرسائل الصابون التي يتم تبادلها على نحو فعال باستخدام بروتوكول النقل.

وتوفر معظم تطبيقات الصابون الارتباطات لبروتوكولات النقل المشتركة، مثل HTTP أو SMTP.

HTTP غير متزامن وتستخدم على نطاق واسع. ويحدد طلب SOAP HTTP اثنين على الأقل من رؤوس HTTP: نوع المحتوى والمحتوى طول.

SMTP هو غير متزامن، ويستخدم في الملاذ الأخير أو حالات معينة.

تطبيقات جافا الصابون دائما ما تقدم محددة ملزمة لدائرة الخدمات الطبية المشتركة (Java Messaging System) البروتوكول.


نوع المحتوى

على رأس Content-Type لطلب الصابون والاستجابة يحدد نوع MIME للرسالة وترميز الأحرف (optional) تستخدم للجسم XML الطلب أو استجابة.

بناء الجملة

Content-Type: MIMEType; charset=character-encoding

مثال

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

طول المحتوى

يحدد رأس طول محتوى لطلب الصابون واستجابة لعدد من وحدات البايت في الجسم من طلب أو استجابة.

بناء الجملة

Content-Length: bytes

مثال

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

الصابون مثال

في المثال التالي، يتم إرسال طلب GetStockPrice إلى ملقم. الطلب ومعلمة StockName، ومعلمة الأسعار التي سيتم عرضها في استجابة. يتم تعريف مساحة للوظيفة في "http://www.example.org/stock" .

طلب SOAP:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

استجابة SOAP:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>