این مهم است که برنامه های وب بتوانند از طریق اینترنت ارتباط برقرار کنند.
بهترین راه برای برقراری ارتباط بین برنامه ها بیش از HTTP است ، زیرا HTTP توسط همه مرورگرها و سرورهای اینترنتی پشتیبانی می شود. صابون برای تحقق این امر ایجاد شده است.
SOAP راهی برای برقراری ارتباط بین برنامه های کاربردی در سیستم عامل های مختلف ، با فناوری های مختلف و زبانهای برنامه نویسی فراهم می کند.
بلوک های ساختمانی صابون
پیام SOAP یک سند XML معمولی است که حاوی عناصر زیر است:
- یک عنصر پاکت که سند XML را به عنوان پیام صابون مشخص می کند
- یک عنصر هدر که حاوی اطلاعات هدر است
- یک عنصر بدن که حاوی اطلاعات تماس و پاسخ است
- یک عنصر خطا حاوی خطاها و اطلاعات وضعیت
تمام عناصر فوق در فضای نام پیش فرض برای پاکت صابون اعلام شده است:
و فضای نام پیش فرض برای رمزگذاری SOAP و انواع داده ها:
قوانین نحو
در اینجا برخی از قوانین مهم نحو آورده شده است:
- یک پیام SOAP باید با استفاده از XML رمزگذاری شود
- یک پیام SOAP باید از فضای نام پاکت صابون استفاده کند
- یک پیام SOAP نباید حاوی مرجع DTD باشد
- پیام SOAP نباید شامل دستورالعمل های پردازش XML باشد
پیام صابون اسکلت
عنصر پاکت صابون
عنصر پاکت صابون مورد نیاز عنصر اصلی پیام SOAP است. این عنصر سند XML را به عنوان یک پیام SOAP تعریف می کند.
مثال
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">واداطلاعات پیام به اینجا می رود.
XMLNS: SOAP NAMESPACE
به XMLNS: SOAP NAMESPACE در مثال بالا توجه کنید. همیشه باید ارزش آن را داشته باشد: "http://www. w3. org/2003/05/soap-envelope/".
فضای نام پاکت را به عنوان یک پاکت صابون تعریف می کند.
اگر از فضای نام متفاوت استفاده شود ، برنامه خطایی ایجاد می کند و پیام را دور می کند.
ویژگی رمزگذاری
از ویژگی EncodingStyle برای تعریف انواع داده های مورد استفاده در سند استفاده می شود. این ویژگی ممکن است در هر عنصر صابون ظاهر شود و در مورد محتوای عنصر و همه عناصر کودک اعمال شود.
پیام صابون هیچ رمزگذاری پیش فرض ندارد.
نحو
مثال
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">واداطلاعات پیام به اینجا می رود.
عنصر هدر صابون
عنصر هدر SOAP اختیاری شامل اطلاعات خاص برنامه (مانند تأیید اعتبار ، پرداخت و غیره) در مورد پیام SOAP است.
اگر عنصر هدر موجود باشد ، باید اولین عنصر کودک عنصر پاکت باشد.
توجه: تمام عناصر فوری کودک عنصر هدر باید از فضای نامگذاری شده استفاده شوند.
مثال بالا حاوی یک هدر با یک عنصر "trans" ، یک ویژگی "mustunderstand" با مقدار 1 و مقدار 234 است.
SOAP سه ویژگی را در فضای نام پیش فرض تعریف می کند. این ویژگی ها عبارتند از: mustUnderstand، actor و encodingStyle.
ویژگی های تعریف شده در SOAP Header، نحوه پردازش پیام SOAP توسط گیرنده را مشخص می کند.
ویژگی mustUnderstand
ویژگی SOAP mustUnderstand میتواند برای نشان دادن اجباری یا اختیاری بودن ورودی هدر برای پردازش توسط گیرنده استفاده شود.
اگر mustUnderstand="1" را به عنصر فرزند عنصر Header اضافه کنید، نشان می دهد که گیرنده پردازش سرصفحه باید عنصر را بشناسد. اگر گیرنده عنصر را تشخیص ندهد، هنگام پردازش هدر از کار می افتد.
نحو
مثال
ویژگی بازیگر
یک پیام SOAP ممکن است از فرستنده به گیرنده با عبور دادن نقاط انتهایی مختلف در مسیر پیام منتقل شود. با این حال، ممکن است تمام بخشهای یک پیام SOAP برای نقطه پایانی در نظر گرفته نشده باشد، در عوض، ممکن است برای یک یا چند نقطه پایانی در مسیر پیام در نظر گرفته شود.
ویژگی SOAP actor برای آدرس دادن عنصر Header به یک نقطه پایانی خاص استفاده می شود.
نحو
مثال
ویژگی رمزگذاری
ویژگی encodingStyle برای تعریف انواع داده های مورد استفاده در سند استفاده می شود. این ویژگی ممکن است در هر عنصر SOAP ظاهر شود و برای محتویات آن عنصر و همه عناصر فرزند اعمال می شود.
پیام صابون هیچ رمزگذاری پیش فرض ندارد.
نحو
عنصر بدن SOAP
عنصر SOAP Body مورد نیاز حاوی پیام SOAP واقعی است که برای نقطه پایانی پیام در نظر گرفته شده است.
عناصر فرزند فوری عنصر SOAP Body ممکن است واجد شرایط فضای نام باشند.
مثال
مثال بالا قیمت سیب را درخواست می کند. توجه داشته باشید که m:GetPrice و عناصر Item در بالا عناصر خاص برنامه هستند. آنها بخشی از فضای نام SOAP نیستند.
یک پاسخ SOAP می تواند چیزی شبیه به این باشد:
عنصر خطای SOAP
عنصر اختیاری SOAP Fault برای نشان دادن پیام های خطا استفاده می شود.
عنصر SOAP Fault خطاها و اطلاعات وضعیت را برای پیام SOAP نگه می دارد.
اگر عنصر Fault وجود داشته باشد، باید به عنوان عنصر فرزند عنصر Body ظاهر شود. یک عنصر خطا فقط می تواند یک بار در یک پیام SOAP ظاهر شود.
عنصر SOAP Fault دارای عناصر فرعی زیر است:
اطلاعات خطای خاص برنامه مربوط به عنصر Body را نگه می دارد
کدهای خطای SOAP
مقادیر کد خطا تعریف شده در زیر باید در عنصر کد خطا هنگام توصیف خطاها استفاده شود:
خطا | شرح |
---|---|
عدم تطابق نسخه ها | یک فضای نام نامعتبر برای عنصر SOAP Envelope پیدا شد |
باید فهمید | یک عنصر فوری کودک از عنصر هدر ، با ویژگی Mustunderstand که به "1" تنظیم شده بود ، درک نشده است |
مشتری | پیام به طور نادرست تشکیل شد یا حاوی اطلاعات نادرست بود |
سرور | مشکلی در سرور وجود داشت تا پیام نتواند ادامه یابد |
پروتکل HTTP
HTTP از طریق TCP/IP ارتباط برقرار می کند. یک مشتری HTTP با استفاده از TCP به یک سرور HTTP متصل می شود. پس از برقراری ارتباط ، مشتری می تواند پیام درخواست HTTP را به سرور ارسال کند:
سرور سپس درخواست را پردازش می کند و پاسخ HTTP را به مشتری ارسال می کند. پاسخ حاوی یک کد وضعیت است که نشان دهنده وضعیت درخواست است:
در مثال بالا ، سرور کد وضعیت 200 را برگرداند. این کد موفقیت استاندارد برای HTTP است.
اگر سرور نتوانست درخواست را رمزگشایی کند ، می توانست چیزی شبیه به این را برگرداند:
صابون
مشخصات SOAP ساختار پیام های SOAP را تعریف می کند ، نه نحوه رد و بدل آنها. این شکاف توسط آنچه "اتصال صابون" نامیده می شود پر می شود. اتصالات صابون مکانیسم هایی هستند که اجازه می دهند پیام های SOAP با استفاده از یک پروتکل حمل و نقل به طور مؤثر رد و بدل شوند.
بیشتر پیاده سازی های SOAP اتصال پروتکل های حمل و نقل مشترک مانند HTTP یا SMTP را فراهم می کند.
HTTP همزمان و به طور گسترده استفاده می شود. درخواست HTTP SOAP حداقل دو هدر HTTP را مشخص می کند: نوع محتوا و طول محتوا.
SMTP ناهمزمان است و در آخرین راه حل یا موارد خاص استفاده می شود.
اجرای جاوا SOAP معمولاً یک اتصال خاص برای پروتکل JMS (سیستم پیام رسانی جاوا) فراهم می کند.
نوع محتوا
هدر نوع محتوا برای درخواست و پاسخ SOAP نوع MIME را برای پیام و رمزگذاری کاراکتر (اختیاری) مورد استفاده برای بدنه XML درخواست یا پاسخ تعریف می کند.
نحو
مثال
محتوا
هدر طول محتوا برای درخواست و پاسخ SOAP تعداد بایت در بدنه درخواست یا پاسخ را مشخص می کند.
نحو
مثال
یک مثال صابون
در مثال زیر ، یک درخواست GetStockPrice به یک سرور ارسال می شود. این درخواست دارای یک پارامتر نام سهام و یک پارامتر قیمت است که در پاسخ بازگردانده می شود. فضای نام برای عملکرد در "http://www. example. org/stock" تعریف شده است.
درخواست صابون:
POST/Instock Http/1. 1 میزبان: www. example. org محتوای نوع: برنامه/صابون+XML ؛charset = UTF-8 طول محتوا: nnn
پاسخ صابون:
HTTP/1. 1 200 OK-Content-Type: Application/SOAP+XML ؛charset = UTF-8 طول محتوا: nnn