SOAP — strukturali xabarlarni network orqali almashish uchun XML asosida yaratilgan messaging protocol. To‘liq nomi Simple Object Access Protocol tarixiy nomidan kelib chiqqan, ammo zamonaviy specification’da u shunchaki SOAP deb yuritiladi.
SOAP HTTP bilan keng ishlatiladi, lekin transportdan mustaqil modelga ega. U enterprise integration, bank, davlat va legacy service’larda uchraydi.
Envelope
Har SOAP message Envelope root elementiga ega.
Soddalashtirilgan ko‘rinish:
<soap:Envelope>
<soap:Header>
...
</soap:Header>
<soap:Body>
...
</soap:Body>
</soap:Envelope>
Envelope message chegarasi va namespace’ni belgilaydi.
Header
Header optional metadata va processing instructionlarni saqlaydi.
Masalan:
- authentication;
- transaction;
- routing;
- signature;
- correlation ID;
- addressing;
- policy.
Header element qaysi node tomonidan qayta ishlanishini belgilashi mumkin.
Body
Body asosiy application payloadni saqlaydi.
Request operation va parameterlar XML elementlari ko‘rinishida beriladi.
Response natija yoki faultni o‘z ichiga oladi.
Schema type va namespace bilan boshqariladi.
XML namespace
SOAP turli standard va application elementlarini namespace orqali ajratadi.
Namespace URI element nomining ma’nosini belgilaydi.
Prefix faqat document ichidagi qisqa nom.
Bir xil local name turli namespace’da boshqa tushuncha bo‘lishi mumkin.
WSDL
WSDL web service contractini XML formatda tasvirlaydi.
U:
haqida ma’lumot beradi.
Tool WSDLdan client proxy va server skeleton yaratishi mumkin.
XML Schema
XSD request va response elementlarining type va structure’ini belgilaydi.
Masalan:
- string;
- decimal;
- date;
- complex type;
- required element;
- occurrence.
Schema validation noto‘g‘ri message’ni rad etishga yordam beradi.
Binding
WSDL abstract operationni aniq transport va message formatiga bog‘laydi.
SOAP binding:
kabi xususiyatlarni belgilashi mumkin.
Document/literal usuli interoperability uchun keng tarqalgan.
SOAP over HTTP
SOAP message ko‘pincha HTTP POST body’da yuboriladi.
Content-Type SOAP versiyasiga bog‘liq.
HTTP status bilan SOAP Fault semantikasi birga ishlashi mumkin.
Ba’zi service HTTP 500 ichida SOAP Fault qaytaradi.
SOAP Fault
Xato standart Fault structure’da beriladi.
U:
- code;
- reason;
- detail;
- node yoki rolega oid ma’lumot
saqlashi mumkin.
Raw stack trace va secret detail tashqi clientga chiqarilmaydi.
WS-Addressing
WS-Addressing message destination, action, reply va message IDga oid headerlarni standartlashtiradi.
Bu transportdan mustaqil routing va asynchronous patternlarga yordam beradi.
Oddiy HTTP endpoint uchun barcha holatda zarur emas.
WS-Security
WS-Security SOAP message darajasida:
- digital signature;
- encryption;
- security token;
- timestamp;
- username token
kabi imkoniyatlarni belgilaydi.
Transport TLS bilan himoyalangan bo‘lsa ham message bir nechta intermediary orqali o‘tganda message-level security talab qilinishi mumkin.
Digital signature
SOAP body yoki headerning aniq qismlari imzolanishi mumkin.
XML Signature canonicalization va reference qoidalariga ega.
Noto‘g‘ri validation signature wrapping hujumiga olib kelishi mumkin.
Application aynan imzolangan elementni qayta ishlashi kerak.
Encryption
XML Encryption message’ning ma’lum elementlarini shifrlash imkonini beradi.
Bu end-to-end yoki qisman maxfiylik beradi.
Key management va recipient certificate lifecycle muhim.
State va transaction
Enterprise SOAP stacklarda distributed transaction, reliable messaging va policyga oid WS-* standardlari mavjud.
Bu murakkab business integration uchun kuchli imkoniyat beradi.
Evaziga interoperability va configuration murakkablashadi.
SOAP va REST
SOAP protocol va XML message contractiga ega.
REST HTTP resource va method semantikasiga tayangan architectural style.
SOAP:
- formal WSDL;
- message-level security;
- enterprise standardlar;
- typed XML.
REST ko‘pincha sodda JSON va HTTP API bilan ishlaydi.
SOAP va RPC
SOAP operation-oriented message bilan RPC uslubida ishlashi mumkin.
Lekin document-style SOAP business document almashinuviga ham mos.
SOAP transport, envelope va extension modelini beradi.
Security
SOAP parser:
xavflariga tayyor bo‘ladi.
External entity o‘chiriladi, size va depth limit qo‘llanadi.
Contract-first
SOAP service’da avval WSDL va XSD contract yozilib, keyin client hamda server code yaratilishi mumkin. Bu contract-first yondashuv turli til va vendorlar orasida interoperabilityni yaxshilaydi. Contract o‘zgarishi version va compatibility bilan boshqariladi.
MTOM
Katta binary data’ni XML ichida base64 sifatida yuborish hajmni oshiradi. MTOM binary qismni optimized attachment ko‘rinishida uzatishga yordam beradi. Message signature va transport integrationi to‘g‘ri sozlanadi.
Intermediary
SOAP header bir nechta intermediary node tomonidan qayta ishlanishi mumkin. mustUnderstandga oid semantika majburiy header e’tiborsiz qolmasligini ta’minlaydi. Noto‘g‘ri node security headerni tashlab yubormasligi kerak.
Versionlash
SOAP 1.1 va SOAP 1.2 envelope namespace hamda HTTP bindingda farqlanadi. Client va server qaysi versiyani qabul qilishini aniq belgilaydi. Noto‘g‘ri Content-Type yoki namespace protocol faultga olib kelishi mumkin.
Namespace versioni
Yangi contract uchun alohida namespace ishlatilishi mumkin. Bu eski va yangi message formatlarini bir muddat parallel qo‘llashga yordam beradi.
Bog‘liq tushunchalar
SOAP, XML, WSDL, XML Schema, SOAP Envelope, SOAP Fault, WS-Security, WS-Addressing, Web service, RPC