SOAP و وبسرویس
پروتکل SOAP برای وبسرویسهای XML — ساختار پیام و WSDL (مفهومی)
SOAP چیست؟
SOAP مخفف Simple Object Access Protocol است؛ پروتکلی مبتنی بر XML برای تبادل پیام بین برنامهها در شبکه (معمولاً با HTTP). SOAP در سیستمهای سازمانی، بانکی و وبسرویسهای قدیمی بسیار رایج است.
ساختار پیام SOAP
هر پیام SOAP یک پاکت (Envelope) است:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<!-- سرآیند: اطلاعات تکمیلی (اختیاری) -->
<soap:Header>
<auth:Authentication xmlns:auth="https://example.com/auth">
<auth:Token>abc123</auth:Token>
</auth:Authentication>
</soap:Header>
<!-- بدنه: پیام اصلی (اجباری) -->
<soap:Body>
<getProductPrice xmlns="https://example.com/shop">
<productId>101</productId>
</getProductPrice>
</soap:Body>
</soap:Envelope>
| بخش | توضیح |
|---|---|
Envelope | ریشه پیام — فضای نام SOAP را تعریف میکند |
Header | اختیاری — احراز هویت، تراکنش، متادیتا |
Body | اجباری — درخواست یا پاسخ واقعی |
Fault | داخل Body — اطلاعات خطا |
پاسخ SOAP
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductPriceResponse xmlns="https://example.com/shop">
<price currency="USD">999</price>
</getProductPriceResponse>
</soap:Body>
</soap:Envelope>
پیام خطا (Fault)
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Product not found</faultstring>
<detail>
<error productId="999" message="No such product"/>
</detail>
</soap:Fault>
</soap:Body>
WSDL — قرارداد سرویس
هر سرویس SOAP معمولاً یک فایل WSDL دارد که با XML توصیف میکند: چه عملیاتی دارد، چه پارامترهایی میگیرد و چه پاسخی میدهد. کلاینت با خواندن WSDL میداند چطور با سرویس حرف بزند.
SOAP در عمل (PHP)
// کلاینت SOAP در PHP — فوقالعاده ساده!
$client = new SoapClient("https://example.com/service?wsdl");
$result = $client->getProductPrice(["productId" => 101]);
echo $result->price; // 999
کتابخانه SOAP خودش پیام XML را میسازد و پاسخ را پارس میکند — شما با شی و متد کار میکنید، نه XML خام!
SOAP در برابر REST
| معیار | SOAP | REST (معمولاً JSON) |
|---|---|---|
| قالب پیام | فقط XML | JSON، XML، هر چیزی |
| پروتکل | HTTP، SMTP، TCP... | HTTP |
| قرارداد | WSDL رسمی و سختگیرانه | OpenAPI (اختیاری) |
| امنیت | WS-Security سازمانی | HTTPS، OAuth |
| سادگی | پیچیدهتر | ساده و وبپسند |
| کاربرد امروز | بانکی، سازمانی، قدیمی | وب و موبایل |
حتی اگر هرگز سرویس SOAP ننویسید، بهعنوان برنامهنویس حرفهای باید ساختار پیامهایش را بشناسید — سیستمهای بانکی و دولتی ایران و جهان هنوز پر از SOAP هستند و روزی با آنها کار خواهید کرد!
این مبحث بخشی از دوره آموزش کامل XML است.