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
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: 200So‘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: 200Yuqoridagi 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-encodingMisol
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8Content-Length
SOAP so‘rovi va javobidagi Content-Length sarlavhasi so‘rov yoki javob tanasidagi baytlar sonini belgilaydi.
Sintaksis
Content-Length: bytesMisol
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250SOAP 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!
