SOAP
| Модель TCP/IP (RFC 1122) |
|---|
| Прикладний рівень |
| BGP · DHCP · DNS · FTP · Gopher · GTP · HTTP · IMAP · IRC · LDAP · NNTP · NTP · POP3 · RIP · RPC · RTCP · RTP · RTSP · SDP · SIP · SMTP · SNMP · SOAP · SSH · STUN · Telnet · TLS/SSL · XMPP · |
| Транспортний рівень |
| TCP · UDP · DCCP · SCTP · RSVP · ECN · (більше) |
| Мережевий рівень |
| IP (IPv4, IPv6) · ICMP · ICMPv6 · IGMP · IPsec · (більше) |
| Рівень мережевих інтерфейсів |
| ARP · RARP · NDP · MPLS · OSPF · Tunnels (L2TP) · MAC-адреса (Ethernet, DSL, ISDN, FDDI) · Device Drivers · (більше) |
SOAP (англ. Simple Object Access Protocol) — протокол обміну структурованими повідомленнями в розподілених обчислювальних системах, базується на форматі XML.
Спочатку SOAP призначався, в основному, для реалізації віддаленого виклику процедур (RPC), а назва була абревіатурою: Simple Object Access Protocol — простий протокол доступу до об'єктів. Зараз протокол використовується для обміну повідомленнями в форматі XML, а не тільки для виклику процедур. SOAP є розширенням мови XML-RPC.
SOAP може використовуватись з будь-яким протоколом прикладного рівня: SMTP, FTP, HTTP та інш. Проте, його взаємодія з кожним із цих протоколів має свої особливості, які потрібно відзначити окремо. Найчастіше SOAP використовується разом з HTTP.
SOAP є одним із стандартів, на яких ґрунтується технологія веб-сервісів.
Зміст
Структура протоколу[ред. • ред. код]
Повідомлення SOAP структурується так:
SOAP- конверт
-
- SOAP-заголовок
- Елемент заголовку 1
- Елемент заголовку 2
- …
- Елемент заголовку N
- Тіло SOAP
- Елемент тіла 1
- Елемент тіла 2
- …
- Елемент тіла N
- SOAP-заголовок
Приклад SOAP POST повідомлення[ред. • ред. код]
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="http://www.example.org/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Приклад[ред. • ред. код]
Приклад SOAP-запиту на сервер інтернет-магазину:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductDetails xmlns="http://warehouse.example.com/ws">
<productID>12345</productID>
</getProductDetails>
</soap:Body>
</soap:Envelope>
Приклад відповіді:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductDetailsResponse xmlns="http://warehouse.example.com/ws">
<getProductDetailsResult>
<productID>12345</productID>
<productName>Стакан гранчатий</productName>
<description>Стакан гранчатий. 200 мл.</description>
<price>9.95</price>
<inStock>true</inStock>
</getProductDetailsResult>
</getProductDetailsResponse>
</soap:Body>
</soap:Envelope>
Переваги[ред. • ред. код]
- SOAP є достатньо гнучким, що дозволяє використовувати різні транспортні протоколи. Стандартні реалізації використовують HTTP як транспортний протокол, однак також можливо використовувати JMS чи SMTP.
- Оскільки, модель SOAP каналів(з’єднань) прекрасно працює в контексті моделі HTTP запитів-відповідей, то можливо легко встановлювати з’єднання на базі існуючих фаєрволів чи проксі-серверів без жодних модифікацій самого SOAP-протоколу.
Недоліки[ред. • ред. код]
- Використання SOAP для передавання повідомлень збільшує їхній обсяг і знижує швидкість обробки. В системах, де швидкість важлива, частіше використовується відсилання XML документів напряму через HTTP, де параметри запиту передаються як звичайні HTTP параметри.
- Не зважаючи на те, що SOAP є стандартом, різні програми часто генерують повідомлення в несумісному форматі. Наприклад, запит згенерований Axis-клієнтом, не буде розпізнано сервером WebLogic.
Посилання[ред. • ред. код]
- Специфікація SOAP(англ.)
- SOAP Версія 1.2 Частина 0: Підручик для початківців(англ.)
- Список серверів для тестування - SOAPBuilders Interoperability Lab (англ.)
|
|
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. |
![]() |
Це незавершена стаття про Інтернет. Ви можете допомогти проекту, виправивши або дописавши її. |


