تاریخ انتشار ۸ شهریور ۱۳۹۳
عنوان انگلیسی The SOAP (Simple Object Access Protocol) Protocol

 

مقدمه

پروتکل SOAP یک پروتکل زیرساختی برای رد و بدل کردن اطلاعات برای پیاده‌سازی خدمات تحت وب در شبکه‌های رایانه‌ای است. این پروتکل در حال حاضر توسط زیرگروهی از W3C اداره می‌شود و در سال ۲۰۰۳ به عنوان یکی از توصیه‌های W3C ثبت شد.

هدف SOAP ایجاد استانداردی برای انتقال پیام‌ها در یک محیط توزیع شده و مستقل از بستر برنامه‌نویسی است. هدف دیگر SOAP و پروتکل‌های مرتبط با آن مانند WSDL، ساده‌سازی کار برنامه‌نویسان با جلوگیری از دوباره کاری در طراحی پروتکل‌ها بوده است.

ویژگی‌های فنی SOAP

این پروتکل مبتنی بر XML است و معمولاً بر بستر پروتکل‌های لایه‌ی کاربرد پیاده‌سازی می‌شوند که متداول‌ترین آن‌ها HTTP

( Hypertext Transfer Protocol ) و    ( SMTP   ( Simple Mail Transfer Protocol هستند

به عنوان نمونه‌ای از رویه‌ای که می‌تواند با مکانیزم‌های SOAP انجام شود، یک سامانه‌ی منابع انسانی را در نظر بگیرید که اطلاعات همه‌ی کارمندان در آن قرار دارد. با دادن پارامترهای جستجو و اجرای یکی از سرویس‌های SOAP سامانه، می‌توان اطلاعات کارمندان شامل نام، شماره شناسنامه، اطلاعات دست‌مزد و … را در قالب XML دریافت کرد. بسته‌های پرتکل SOAP از چند بخش تشکیل شده اند:

  1. یک بسته که تعریف می‌کند پیام چیست و چگونه باید آن را پردازش کرد
  2. مجموعه‌ای از قواعد Encoding برای بازنمایی داده‌های در سطح نرم‌افزارهای کاربردی
  3. توافقی برای بازنمایی صدا شدن توابع و پاسخ آن‌ها

پروتکل SOAP سه ویژگی بارز دارد:

  1. توسعه‌پذیری: این پروتکل بخش‌هایی دارد که قابلیت توسعه و ارتقا است، مثلاً بخش‌های امنیت و WS-routing که جزو الحاقیه‌هایی هست که در حال تغییر است.
  2. خنثی بودن: SOAP می‌تواند بر بستر هر پرتکل انتقالی مانند HTTP، SMTP، TCP، UDP و JMS
  3. استقلال: SOAP مدل برنامه‌نویسی را محدود نمی‌کند.

ساختار پیام‌هادر SOAP

پیام‌‌های SOAP، عناصر XML مشخصی دارند که شامل بخش‌های Envelope، Header، ‌Body و Fault است، که درشکل ۱نشان داده شده‌اند. شرح این موارد در ادامه می‌آید.

  1. Envelope: در واقع هر پیام از یک عنصر Envelope تشکیل است که مشخص می‌کند این پیام از نوع SOAP است. بقیه‌ی پیام داخل این عنصر قرار دارد. مقدار ویژگی soap:encodingStyle، encoding بقیه‌ی پیام را مشخص می‌کند و مقدار پیش‌فرض ندارد.
  2. Header: این عنصر دارای محتویات سرآیند پیام است و وجود آن اختیاری است. سرآیند در طول مسیر پردازش پیام توسط بعضی گره‌ها مورد بررسی قرار می‌گیرد و همه‌ی گره‌های میانی مسیر همه‌ی بخش‌های سرآیند را لزوماً متوجه نمی‌شوند. متحویات Header بستگی به کاربرد دارد و تنها بخش‌های محدودی از ویژگی‌ها مشترک هستند که از این میان soap:mustUnderstand و soap:actor را می‌توان نام برد.

SOAP1

۳. Body:این عنصر شامل اطلاعات اصلی پیام است که شامل درخواست یا پاسخ درخواست می‌شود. نمونه‌ای از یک عنصر Body را در کد زیر می‌بینید. توجه کنید که عناصر زیر soap:Body معمولاً در هر کاربردی متفاوت هستند. در این نمونه m:GetPrice یک عنصر تعریف شده در نرم‌افزاری فرضی است.

۴٫ Fault: این عنصر نیز اختیاری است و شامل اطلاعات مربوط به خطاها و وضعیت می‌شود. مهم‌ترین ویژگی عنصر Fault، soap:faultcode است، که دسته‌ی علت خطا را مشخص می‌کند.

<?xml version=”1.0″?>
<soap:Envelopexmlns:soap=”http://www.w3.org/2001/12/soap-envelope”soap:encodingStyle=”http://www.w3.org/2001/12/soap-encoding”>
<soap:Body>
<m:GetPrice xmlns:m=”http://www.w3schools.com/prices”>
   <m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
 

نمونه‌ای از یک پیام درخواست SOAP در بستر HTTP را در ادامه می‌بینید. همانطور که دیده می‌شود، این پیام در قالب HTTP POST برای سرور www.viratech.ir ارسال شده است. مشخصه‌ی متمایز کننده این درخواست HTTP به عنوان یک درخواست SOAP، Content-Type آن است که برابر application/soap+xml است. متن پیام در قابل XML است و ساختار مربوط به SOAP را داراست. این ساختار شامل تگ‌های سطح بالای soap:Envelope و soap:Body می‌شود.

POST /InStock HTTP/1.1
Host: www.viratech.ir
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version=”1.0″?>
<soap:Envelope
xmlns:soap=”http://www.w3.org/2001/12/soap-envelope”
soap:encodingStyle=”http://www.w3.org/2001/12/soap-encoding”>
<soap:Body xmlns:m=”http://www.viratech.ir/stock”>
<m:GetStockPrice>
   <m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>

پاسخ فرضی این پیام توسط سرور داده می‌شود و در ادامه آمده است. پاسخ نیز طبیعتاً در قالب HTTP است و بدنه‌ی آن XML با ساختار 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.w3s.org/2001/12/soap-envelope” soap:encodingStyle=”http://www.w3.org/2001/12/soap-encoding”><soap:Body xmlns:m=”http://www.viratech.ir/stock”>
<m:GetStockPriceResponse>
   <m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
 
</soap:Envelope>

 

 

«استفاده از مطالب این وبلاگ با ذکر لینک و منبع، بلامانع است»