فهرست سرفصل‌های XML
خانه (XML HOME) مقدمه (XML Introduction) نحوه استفاده (XML How to use) درخت (XML Tree) سینتکس (XML Syntax) عناصر (XML Elements) ویژگی ها (XML Attributes) فضاهای نام (XML Namespaces) نمایش (XML Display) XMLHttpRequest (XML HttpRequest) پارسر (XML Parser) DOM (XML DOM) XPath (XML XPath) XSLT (XML XSLT) XQuery (XML XQuery) XLink (XML XLink) اعتبارسنج (XML Validator) DTD (XML DTD) اسکیما (XML Schema) سرور (XML Server) مقدمه (AJAX Introduction) ساخت XMLHttpRequest (AJAX XMLHttp) ارسال درخواست (AJAX Request) پاسخ (AJAX Response) فایل XML (AJAX XML File) AJAX با PHP (AJAX PHP) AJAX با ASP (AJAX ASP) پایگاه داده (AJAX Database) اپلیکیشن ها (AJAX Applications) مثال ها (AJAX Examples) مقدمه (DOM Introduction) گره ها (DOM Nodes) دسترسی (DOM Accessing) اطلاعات گره (DOM Node Info) فهرست گره ها (DOM Node List) پیمایش (DOM Traversing) ناوبری (DOM Navigating) گرفتن مقادیر (DOM Get Values) تغییر گره ها (DOM Change Nodes) حذف گره ها (DOM Remove Nodes) جایگزینی گره ها (DOM Replace Nodes) ساخت گره ها (DOM Create Nodes) افزودن گره ها (DOM Add Nodes) کلون کردن گره ها (DOM Clone Nodes) مثال ها (DOM Examples) مقدمه (XPath Introduction) گره ها (XPath Nodes) سینتکس (XPath Syntax) محورها (XPath Axes) عملگرها (XPath Operators) مثال ها (XPath Examples) مقدمه (XSLT Introduction) زبان ها (XSL Languages) تبدیل (XSLT Transform) الگو (<template>) (XSLT <template>) value-of (<value-of>) (XSLT <value-of>) for-each (<for-each>) (XSLT <for-each>) مرتب سازی (XSLT <sort>) اگر (<if>) (XSLT <if>) انتخاب (XSLT <choose>) اعمال قالب ها (XSLT Apply) در سمت کلاینت (XSLT on the Client) در سمت سرور (XSLT on the Server) ویرایش XML (XSLT Edit XML) مثال ها (XSLT Examples) مقدمه (XQuery Introduction) مثال (XQuery Example) FLWOR (XQuery FLWOR) HTML (XQuery HTML) اصطلاحات (XQuery Terms) سینتکس (XQuery Syntax) افزودن (XQuery Add) انتخاب (XQuery Select) توابع (XQuery Functions) مقدمه (DTD Introduction) بلوک های سازنده (DTD Building Blocks) عناصر (DTD Elements) ویژگی ها (DTD Attributes) عناصر در برابر ویژگی ها (DTD Elements vs Attr) موجودیت ها (DTD Entities) مثال ها (DTD Examples) مقدمه (XSD Introduction) چگونه (XSD How To) برچسب <schema> (XSD <schema>) عناصر (XSD Elements) ویژگی ها (XSD Attributes) محدودیت ها (XSD Restrictions) عناصر پیچیده (XSD Complex Elements) خالی (XSD Empty) فقط عناصر (XSD Elements-only) فقط متن (XSD Text-only) ترکیبی (XSD Mixed) نشانگرها (XSD Indicators) <any> (XSD <any>) <anyAttribute> (XSD <anyAttribute>) جایگزینی (XSD Substitution) مثال (XSD Example) رشته (XSD String) تاریخ/زمان (XSD Date/Time) عددی (XSD Numeric) متفرقه (XSD Misc) مرجع (XSD Reference) سرویس ها (XML Services) WSDL (XML WSDL) SOAP (XML SOAP) RDF (XML RDF) RSS (XML RSS) مثال ها (XML Examples) آزمون (XML Quiz) سیلابس (XML Syllabus) برنامه مطالعه (XML Study Plan) گواهینامه (XML Certificate) انواع گره (DOM Node Types) گره (DOM Node) NodeList (DOM NodeList) NamedNodeMap (DOM NamedNodeMap) سند (DOM Document) عنصر (DOM Element) ویژگی (DOM Attribute) متن (DOM Text) CDATA (DOM CDATA) کامنت (DOM Comment) XMLHttpRequest (DOM XMLHttpRequest) پارسر (DOM Parser) المان ها (XSLT Elements) توابع (XSLT/XPath Functions)
نتیجه‌ای برای جستجو یافت نشد.
XML

XML — SOAP (XML SOAP)

آخرین بروزرسانی: 1404/08/17

SOAP (XML SOAP)

در این صفحه با پروتکل SOAP آشنا می شوی. «پروتکل (Protocol)» یعنی قوانین گفتگو. SOAP پیام ها را با XML می سازد. سپس بین برنامه ها جابجا می کند. این یعنی سازگاری بین سیستم های مختلف.

چرا SOAP مهم است؟

برنامه ها باید حرف بزنند. HTTP تقریباً همه جا هست. بنابراین، SOAP روی HTTP سوار می شود. سپس بین سیستم ها پیام امن و استاندارد جابجا می کند.

آجرهای پیام SOAP

  • Envelope: کل پیام را قاب می کند.
  • Header: اطلاعات اضافی مثل احراز هویت.
  • Body: درخواست و پاسخ اصلی.
  • Fault: خطا و وضعیت اجرای پیام.

نام فضای Envelope باید http://www.w3.org/2003/05/soap-envelope باشد. نام فضای encoding هم http://www.w3.org/2003/05/soap-encoding است.

قوانین نحوی مهم

  • پیام باید XML باشد.
  • باید نام فضای Envelope را داشته باشد.
  • نباید DTD داشته باشد.
  • نباید دستورهای پردازشی 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">
  <soap:Header>
    ...
  </soap:Header>
  <soap:Body>
    ...
    <soap:Fault>
      ...
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

مشاهده در ادیتور

Envelope و encodingStyle

Envelope ریشه پیام است. encodingStyle نوع های داده را مشخص می کند. پیش فرضی وجود ندارد. مقدار آن یک URI است.

soap:encodingStyle="URI"

مشاهده در ادیتور

Header و mustUnderstand

Header اختیاری است. اما اگر بیاید، اولین فرزند Envelope است. ویژگی mustUnderstand می گوید این سرتیتر الزامی است یا نه.

<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="https://www.w3schools.com/transaction/"
      soap:mustUnderstand="1">234</m:Trans>
  </soap:Header>
</soap:Envelope>

مشاهده در ادیتور

actor برای نشانه گذاری گیرنده میانی

گاهی پیام از چند ایستگاه عبور می کند. ویژگی actor مشخص می کند کدام ایستگاه مخاطب این هدر است.

soap:actor="URI"

مشاهده در ادیتور

Body: محل درخواست و پاسخ

Body پیام واقعی را دارد. عناصر داخل آن می توانند نام فضا داشته باشند.

<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="https://www.w3schools.com/prices">
      <m:Item>Apples</m:Item>
    </m:GetPrice>
  </soap:Body>
</soap:Envelope>

مشاهده در ادیتور

Fault: گزارش خطا و وضعیت

Fault داخل Body می آید و فقط یک بار مجاز است. زیرالمان های مهم: faultcode، faultstring، faultactor، detail.

کد خطاتوضیح
VersionMismatchنام فضای Envelope معتبر نیست.
MustUnderstandهدر ضروری شناخته نشد.
Clientپیام بد ساخته شده است.
Serverمشکل سمت سرور رخ داده است.

نمونه کامل درخواست و پاسخ

درخواست قیمت سهام ارسال می شود. پاسخ قیمت را برمی گرداند.

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>

مشاهده در ادیتور

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>

مشاهده در ادیتور

گام های عملی شروع با SOAP

  1. Envelope را با نام فضای درست بساز.
  2. Header را در صورت نیاز اضافه کن.
  3. Body را با داده دامنه پر کن.
  4. در صورت خطا از Fault استفاده کن.

نکته: برای مسیر کامل، اول WSDL را ببین. سپس صفحه RDF را مرور کن. همچنین، از این لینک برای تمرکز کلیدواژه استفاده کن: پروتکل SOAP.

جمع بندی سریع

  • Envelope قاب پیام است.
  • Header برای فراداده پیام است.
  • Body حامل درخواست و پاسخ است.
  • Fault خطا را استاندارد گزارش می کند.
  • نام فضاهای SOAP بسیار مهم هستند.

منبع W3Schools را برای جزئیات ببین.