وباکا

آموزش تخصصی برنامه نویسی وب

SOAP مخفف کلمات Simple Object Access Protocol است که از ورژن 1.2 به بعد این پروتکل به اختصار SOAP نامیده می شود. SOAP به شما اجازه می دهد تا نرم افزار های سازگار ایجاد کنید و دیگران از مزایای نرم افزار شما روی شبکه بهره مند شوند. SOAP قوانینی را برای ارسال و دریافت RPC (مخفف کلمات Remote Procedure Call) مانند: ساختار درخواست و پاسخ را تعریف می کند بنابراین SOAP محدود به نوعی سیستم عامل مشخص یا زبان برنامه نویسی مشخصی نیست، آنچه که مهم است این است که هر کسی می تواند پیام های SOAP را در زبان مورد استفاده خودش تدوین یا تجزیه کند.

در این قسمت شما را با فرمت پیام های SOAP آشنا خواهیم کرد.

ساختار یک پیام SOAP

SOAP بر پایه XML است و توسط انسان قابل خواندن می باشد اما یک طرح خاص وجود دارد که باید رعایت شود، در کد زیر یک پیام SOAP را بدون هیچ گونه داده ای مشاهده می کنید:

<?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:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>

ممکن است کد بالا را به صورت یک فایل XML معمولی نگاه کنید اما آنچه که ایجاد شده است یک پیام SOAP با عنصر ریشه Envelope با فضای نام soap

که http://www.w3.org/2001/12/soap-envelope در نظر گرفته می شود. صفت soap:encodingStyle، نوع داده ی استفاده شده در فایل را مشخص می کند، اما SOAP خودش شیوه کدگذاری پیش فرضی ندارد. soap:Envelope اجباری است، اما عنصر بعدی یعنی soap:Header اختیاری است و به طور معمول شامل اطلاعات مربوط به اعتبار سنجی و اداره کردن Session است. پروتکل SOAP هیچ گونه اعتبار سنجی توکاری را ارئه نمی کند اما شامل اعتبار سنجی در تگ header توسط توسعه دهندگان می باشد.

عنصر بعدی که موردنیاز است soap:Body است که شامل پیام RPC واقعی است که خود شامل نام های متد در موارد درخواست و مقادیر برگشتی در موارد پاسخ از متد می باشد. soap:Fault که یک عنصر اختیاری است در صورت وجود هر نوع خطایی، اطلاعات وضعیت و پیغام های SOAP را نگهداری می کند که باید یک عنصر فرزند از soap:Body باشد.

حالا که مقدمات ایجاد یک پیغام SOAP را درک کردید، نگاهی به درخواست ها و پاسخ های SOAP بیندازیم. در ابتدا با درخواست SOAP شروع می کنیم.

یک نمونه درخواست با فرمت SOAP

<?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.yourwebroot.com/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>

در بالا یک نمونه پیام درخواست SOAP برای بدست آوردن قیمت انبار از یک شرکت خاص است. در داخل soap:Body باید به این نکته توجه داشته باشید که عنصر GetStockPrice مختص به نرم افزار است و نه یک عنصر SOAP، که تابعی روی سرور است که پارمتر “نام” را برای این درخواست فراخوانی شده دریافت می کند. StocName هم مخصوص Application است و آرگومانی برای تابع می باشد.

پیام پاسخ هم شبیه به درخواست است

<?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.yourwebroot.com/stock">
<m:GetStockPriceResponse>
<m:Price>183.08</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>

داخل عنصر soap:Body یک عنصر GetStockPriceResponse با فرزند Price وجود دارد که شامل داده برگشتی است. همانطور که خودتان هم حدس زدید، GetStockPriceResponse و Price مختص به خود Application می باشد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب