Soap, клієнт-сервер - чорно-синій - medium
Зовсім недавно змінив компанію, і на новому проекті довелося розібратися що таке SOAP і з чим його їдять.
Спочатку SOAP - Simple Object Access Protocol, хоча з виходом нової версії його назва перестало бути абревіатурою і початок вважатися просто найменуванням.
Взагалі, якщо так брати, то не потрібно розбиратися, як він працює, а просто брати і працювати, внутрішніх цього протоколу жахливі, і якщо у вас не варто вимог іспользивать його я б порадив вам реалізувати звичайний RESTful веб-сервіс і все.
Відступлюся і опишу чому я раджу створювати саме REST веб сервіс, а не використовувати SOAP.
Перше і найголовніше, що REST зрозумілий і поріг входження для написання сервера - набагато нижче, ніж SOAP.
Друге, з REST сервером досить просто і зручно взаємодіяти. XML - гарантує вам правильні відповіді, і ви знаєте, чого очікувати, але якщо дотримуватися стандартів і домовитися про єдиний метод обробки помилок, то проблем з цим виникнути не повинно.
Третє, SOAP досить важкоатлет, на відміну від REST.
Четверте, дебаг REST сервісу набагато простіше і зручніше. Можна звичайно іспользивать спеціальні тулзи начебто SoapUi, але з ними спочатку потрібно розібратися.
Повернемося до пояснення:
Взаємодія між клієнтом і сервером, в плані обміну даними відбувається в чітко заданому форматі, за допомогою wsdl файлів, де все прописано на жахливому "ентерпрайзном" xml-е. З цього в разі не соотвествующих шаблонами, ви регулярно будете ловити то на клієнті, то на серверве "SOAP validation error", це означає, що один з установки не були соотвесвует паттерну відповіді xml. Поясню на прикладі:
Приклад коду, SOAP-клієнт на PHP
Тут, ми просто беремо потрібний нам wsdl, просто вказуючи місцезнаходження файлу (можливо вказати так само uri) файлу.
І викликаємо метод, який є на сервері в документації, можна так само подивитися сам xml файл, що б зрозуміти, які методи доступні, зазвичай там є мінімальне опис.
Тепер до сервера

Приклад коду, SOAP-сервера на PHP
Ми створюємо клас, який хочемо віддати в якості відповіді, все його методи і що вони повертають задокументовані в wsdl-файлі. Ми створюємо новий об'єкт в конструкторі вказуючи шлях до файлу. Призначаємо об'єкту потрібний нам клас і викликаємо метод handle (), що б всі запити оброблялися по SOAP протоколу, формували відповіді і все інше. Цитуючи документацію:
Processes a SOAP request, calls necessary functions, and sends a response back.
Тепер з приводу WSDL файлів і XML.
An WSDL document describes a web service. It specifies the location of the service, and the methods of the service, using these major elements:
Основний мануал, як завжди лежить на сайті w3schools:
На останок, хотілося б уточнити, що для створення комунікації по протоколу SOAP, вам не обов'язково генерувати wsdl, але це буде корисно, через наявність чіткої специфікації і знання того, які методи існують, що кожен з них повинен віддавати і приймати.
Приклад коду, на PHP, без створення wsdl.