XML SOAP


  • SOAP — Simple Object Access Protocol (obyektlarga oddiy kirish protokoli) degan ma’noni anglatadi
  • SOAP — ilovalararo aloqa protokoli
  • SOAP — xabarlarni yuborish va qabul qilish formati
  • SOAP platformaga bog‘liq emas
  • SOAP XML’ga asoslangan
  • SOAP — W3C tavsiyasi

ULASHISH

Nega SOAP?

Veb-ilovalar uchun Internet orqali aloqa qila olish muhim.

Ilovalar o‘rtasida aloqa qilishning eng yaxshi usuli — HTTP orqali, chunki HTTP barcha Internet brauzerlari va serverlari tomonidan qo‘llab-quvvatlanadi. SOAP aynan shu maqsadda yaratilgan.

SOAP turli operatsion tizimlarda, turli texnologiyalar va dasturlash tillarida ishlaydigan ilovalar o‘rtasida aloqa qilish usulini taqdim etadi.


SOAP tarkibiy qismlari

SOAP xabari quyidagi elementlarni o‘z ichiga olgan oddiy XML hujjatdir:

  • XML hujjatni SOAP xabari sifatida belgilaydigan Envelope elementi
  • Sarlavha ma’lumotlarini o‘z ichiga olgan Header elementi
  • Chaqiruv va javob ma’lumotlarini o‘z ichiga olgan Body elementi
  • Xatolar va holat ma’lumotlarini o‘z ichiga olgan Fault elementi

Yuqoridagi barcha elementlar SOAP konverti (envelope) uchun standart nomlar fazosida e’lon qilingan:

http://www.w3.org/2003/05/soap-envelope

SOAP kodlash va ma’lumot tiplari uchun standart nomlar fazosi esa:

http://www.w3.org/2003/05/soap-encoding


Sintaksis qoidalari

Mana ba’zi muhim sintaksis qoidalari:

  • SOAP xabari XML yordamida kodlanishi SHART
  • SOAP xabari SOAP Envelope nomlar fazosidan foydalanishi SHART
  • SOAP xabarida DTD’ga havola bo‘lishi MUMKIN EMAS
  • SOAP xabarida XML qayta ishlash ko‘rsatmalari (Processing Instructions) bo‘lishi MUMKIN EMAS


SOAP xabari skeleti

<?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>

SOAP Envelope elementi

Majburiy SOAP Envelope elementi SOAP xabarining ildiz elementidir. Bu element XML hujjatni SOAP xabari sifatida belgilaydi.

Misol

<?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">   ...   Message information goes here   ... </soap:Envelope>

xmlns:soap nomlar fazosi

Yuqoridagi misoldagi xmlns:soap nomlar fazosiga e’tibor bering. Uning qiymati doimo "http://www.w3.org/2003/05/soap-envelope" bo‘lishi kerak.

Nomlar fazosi Envelope’ni SOAP Envelope sifatida belgilaydi.

Agar boshqa nomlar fazosi ishlatilsa, ilova xato hosil qiladi va xabarni rad etadi.


encodingStyle atributi

encodingStyle atributi hujjatda ishlatiladigan ma’lumot tiplarini aniqlash uchun ishlatiladi. Bu atribut istalgan SOAP elementida kelishi mumkin va element kontentiga hamda uning barcha bola elementlariga taalluqli bo‘ladi.

SOAP xabarida standart kodlash yo‘q.

Sintaksis

soap:encodingStyle="URI"

Misol

<?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">   ...   Message information goes here   ... </soap:Envelope>

SOAP Header elementi

Ixtiyoriy SOAP Header elementi SOAP xabari haqidagi ilovaga xos ma’lumotlarni (masalan, autentifikatsiya, to‘lov va h.k.) o‘z ichiga oladi.

Agar Header elementi mavjud bo‘lsa, u Envelope elementining birinchi bola elementi bo‘lishi kerak.

Eslatma: Header elementining barcha bevosita bola elementlari nomlar fazosi bilan malakalangan (namespace-qualified) bo‘lishi kerak.

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

Yuqoridagi misolda "Trans" elementi, qiymati 1 bo‘lgan "mustUnderstand" atributi va 234 qiymatiga ega sarlavha (header) bor.

SOAP standart nomlar fazosida uchta atributni belgilaydi. Bular: mustUnderstand, actor va encodingStyle.

SOAP Header’da aniqlangan atributlar qabul qiluvchi SOAP xabarini qanday qayta ishlashi kerakligini belgilaydi.


mustUnderstand atributi

SOAP mustUnderstand atributi yordamida sarlavha yozuvini qayta ishlash qabul qiluvchi uchun majburiy yoki ixtiyoriy ekanini ko‘rsatish mumkin.

Agar Header elementining bola elementiga mustUnderstand="1" qo‘shsangiz, bu Header’ni qayta ishlayotgan qabul qiluvchi elementni tanishi shart ekanini bildiradi. Agar qabul qiluvchi elementni tanimasa, Header’ni qayta ishlashda xatolik bilan to‘xtaydi.

Sintaksis

soap:mustUnderstand="0|1"

Misol

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

actor atributi

SOAP xabari jo‘natuvchidan qabul qiluvchiga xabar yo‘lidagi turli oxirgi nuqtalardan (endpoint) o‘tib borishi mumkin. Biroq SOAP xabarining barcha qismlari ham yakuniy oxirgi nuqtaga mo‘ljallanmagan bo‘lishi mumkin — ular xabar yo‘lidagi bir yoki bir nechta oxirgi nuqtaga mo‘ljallangan bo‘lishi mumkin.

SOAP actor atributi Header elementini ma’lum bir oxirgi nuqtaga yo‘naltirish uchun ishlatiladi.

Sintaksis

soap:actor="URI"

Misol

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

encodingStyle atributi

encodingStyle atributi hujjatda ishlatiladigan ma’lumot tiplarini aniqlash uchun ishlatiladi. Bu atribut istalgan SOAP elementida kelishi mumkin va u shu element kontentiga hamda uning barcha bola elementlariga taalluqli bo‘ladi.

SOAP xabarida standart kodlash yo‘q.

Sintaksis

soap:encodingStyle="URI"

SOAP Body elementi

Majburiy SOAP Body elementi xabarning yakuniy oxirgi nuqtasiga mo‘ljallangan haqiqiy SOAP xabarini o‘z ichiga oladi.

SOAP Body elementining bevosita bola elementlari nomlar fazosi bilan malakalangan bo‘lishi mumkin.

Misol

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

Yuqoridagi misol olmalar narxini so‘raydi. E’tibor bering, yuqoridagi m:GetPrice va Item elementlari ilovaga xos elementlar. Ular SOAP nomlar fazosining bir qismi emas.

SOAP javobi taxminan quyidagicha ko‘rinishi mumkin:

<?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>   <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">     <m:Price>1.90</m:Price>   </m:GetPriceResponse> </soap:Body> </soap:Envelope>


SOAP Fault elementi

Ixtiyoriy SOAP Fault elementi xato xabarlarini ko‘rsatish uchun ishlatiladi.

SOAP Fault elementi SOAP xabari uchun xatolar va holat ma’lumotlarini saqlaydi.

Agar Fault elementi mavjud bo‘lsa, u Body elementining bola elementi sifatida kelishi kerak. Fault elementi SOAP xabarida faqat bir marta kelishi mumkin.

SOAP Fault elementi quyidagi quyi elementlarga ega:

Quyi element Tavsif
<faultcode> Nosozlikni aniqlash uchun kod
<faultstring> Nosozlikning inson o‘qiy oladigan tushuntirishi
<faultactor> Nosozlikka kim sabab bo‘lgani haqidagi ma’lumot
<detail>

Body elementiga oid ilovaga xos xato ma’lumotlarini saqlaydi

SOAP nosozlik kodlari

Nosozliklarni tavsiflashda faultcode elementida quyida belgilangan faultcode qiymatlaridan foydalanish kerak:

Xato Tavsif
VersionMismatch SOAP Envelope elementi uchun yaroqsiz nomlar fazosi topildi
MustUnderstand Header elementining mustUnderstand atributi "1" ga o‘rnatilgan bevosita bola elementi tushunilmadi
Client Xabar noto‘g‘ri tuzilgan yoki noto‘g‘ri ma’lumotlarni o‘z ichiga olgan
Server Serverda muammo yuzaga keldi, shuning uchun xabarni qayta ishlashni davom ettirib bo‘lmadi

HTTP protokoli

HTTP TCP/IP orqali aloqa qiladi. HTTP mijoz TCP yordamida HTTP serverga ulanadi. Ulanish o‘rnatilgandan so‘ng mijoz serverga HTTP so‘rov xabarini yuborishi mumkin:

POST /item HTTP/1.1 Host: 189.123.255.239 Content-Type: text/plain Content-Length: 200

So‘ngra server so‘rovni qayta ishlaydi va mijozga HTTP javobini qaytarib yuboradi. Javob so‘rov holatini ko‘rsatuvchi holat kodini o‘z ichiga oladi:

200 OK Content-Type: text/plain Content-Length: 200

Yuqoridagi misolda server 200 holat kodini qaytardi. Bu HTTP uchun standart muvaffaqiyat kodi.

Agar server so‘rovni dekodlay olmaganida, u taxminan quyidagini qaytargan bo‘lardi:

400 Bad Request Content-Length: 0

SOAP bog‘lanishi (binding)

SOAP spetsifikatsiyasi SOAP xabarlarining tuzilishini belgilaydi, ular qanday almashinishini emas. Bu bo‘shliqni "SOAP bog‘lanishlari" (SOAP Bindings) deb ataladigan narsa to‘ldiradi. SOAP bog‘lanishlari — SOAP xabarlarini transport protokoli yordamida samarali almashish imkonini beruvchi mexanizmlar.

Aksariyat SOAP realizatsiyalari HTTP yoki SMTP kabi keng tarqalgan transport protokollari uchun bog‘lanishlarni taqdim etadi.

HTTP sinxron va keng qo‘llaniladi. SOAP HTTP so‘rovi kamida ikkita HTTP sarlavhasini belgilaydi: Content-Type va Content-Length.

SMTP asinxron bo‘lib, so‘nggi chora sifatida yoki alohida hollarda ishlatiladi.

SOAP’ning Java realizatsiyalari odatda JMS (Java Messaging System) protokoli uchun maxsus bog‘lanishni (binding) taqdim etadi.


Content-Type

SOAP so‘rovi va javobidagi Content-Type sarlavhasi xabarning MIME turini hamda so‘rov yoki javobning XML tanasi uchun ishlatiladigan belgilar kodirovkasini (ixtiyoriy) belgilaydi.

Sintaksis

Content-Type: MIMEType; charset=character-encoding

Misol

POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8

Content-Length

SOAP so‘rovi va javobidagi Content-Length sarlavhasi so‘rov yoki javob tanasidagi baytlar sonini belgilaydi.

Sintaksis

Content-Length: bytes

Misol

POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 250

SOAP misoli

Quyidagi misolda serverga GetStockPrice so‘rovi yuboriladi. So‘rovda StockName parametri bor, javobda esa Price parametri qaytariladi. Funksiyaning nomlar fazosi "http://www.example.org/stock" manzilida belgilangan.

SOAP so‘rovi:

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>

SOAP javobi:

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>

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!