SOAP, WSDL і трохи Python: створюємо веб-сервіс крок за кроком
У світі REST API часто забувають про інший стандарт — SOAP. Цей протокол і досі широко використовується у великих організаціях, банках, телекомі та державному секторі. У цій статті ми розглянемо, як створити SOAP веб-сервіс на Python, використовуючи бібліотеку Spyne
, і як працює WSDL-файл.
Що таке SOAP і WSDL?
- SOAP (Simple Object Access Protocol) — це протокол обміну структурованими повідомленнями, зазвичай у форматі XML. Він формалізує передачу даних через HTTP або SMTP.
- WSDL (Web Services Description Language) — це XML-файл, який описує доступні методи веб-сервісу, типи параметрів, структури запитів і відповідей.
Коли варто використовувати SOAP?
SOAP ідеально підходить для:
- контрактно-орієнтованих API;
- інтеграції зі сторонніми системами;
- високого рівня безпеки (WS-Security);
- складних типів даних та операцій.
Встановлення бібліотек
Для Python одним з найзручніших рішень є Spyne
. Встановімо:
pip install spyne lxml
Створення простого SOAP-сервісу
from spyne import Application, rpc, ServiceBase, Integer, Unicode
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@rpc(Unicode, Integer, _returns=Unicode)
def say_hello(ctx, name, times):
return u' '.join([f"Привіт, {name}!" for _ in range(times)])
application = Application([
HelloWorldService
],
tns='spyne.examples.hello',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()
)
if __name__ == '__main__':
from wsgiref.simple_server import make_server
wsgi_app = WsgiApplication(application)
server = make_server('127.0.0.1', 8000, wsgi_app)
print("Сервер працює на http://127.0.0.1:8000")
server.serve_forever()
Отримання WSDL
Після запуску сервера ви можете перейти на:
http://127.0.0.1:8000/?wsdl
Ви побачите WSDL-документ, який описує ваш веб-сервіс. Його можуть використовувати інші системи або розробники для автоматичної генерації клієнтів.
Тестування SOAP-сервісу
Для тестування можна використовувати Postman або SoapUI. У запиті потрібно вказати правильний SOAP Envelope:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spy="spyne.examples.hello">
<soapenv:Header/>
<soapenv:Body>
<spy:say_hello>
<spy:name>Світ</spy:name>
<spy:times>2</spy:times>
</spy:say_hello>
</soapenv:Body>
</soapenv:Envelope>
Висновок
SOAP — це не архаїзм, а потужний інструмент, який досі актуальний у багатьох сферах. Завдяки бібліотеці Spyne ми можемо легко створити повноцінний SOAP-сервіс на Python із доступом до WSDL, підтримкою XML і серіалізацією/десеріалізацією складних типів.