Минималистский, не корпоративный подход для сервера SOAP в Python - PullRequest
1 голос
/ 10 октября 2009

Мне нужно реализовать небольшую тестовую утилиту, которая использует чрезвычайно простые сообщения SOAP XML (HTTP POST). Это протокол, который я должен поддерживать, и это не мое дизайнерское решение использовать SOAP (просто пытаюсь предотвратить ответы «почему вы используете протокол X?»)

Я бы хотел использовать материал, который уже есть в базовой установке Python 2.6.x. Какой самый простой способ сделать это? Единственное сообщение SOAP действительно простое, я бы не стал использовать корпоративные инструменты, такие как генерация классов WSDL, если это возможно.

Я уже реализовал ту же функциональность ранее в Ruby с помощью простого HTTPServlet :: AbstractServlet и REXML-парсера. Работал нормально.

Я думал, что смогу подобным решением в Python с BaseHTTPServer, BaseHTTPRequestHandler и анализатором elementree, но мне не очевидно, как я могу прочитать содержимое моего входящего сообщения SOAP POST . Документация не так уж велика ИМХО.

Ответы [ 2 ]

3 голосов
/ 10 октября 2009

Вы можете написать функцию WSGI (см. wsgiref) и проанализировать внутри нее тело HTTP-запроса, используя модуль xml.etree.ElementTree.

SOAP в основном очень прост, я не уверен, что он заслуживает специального модуля. Просто используйте стандартную библиотеку обработки XML, которая вам нравится.

1 голос
/ 10 октября 2009

Я написал что-то вроде этого в Boo, используя .Net HTTPListener, потому что мне тоже пришлось реализовывать чей-то другой WSDL.

WSDL Мне дали использованную документную / буквальную форму (вам нужно будет внести некоторые коррективы в эту информацию, если ваш WSDL использует rpc / encoded). Я обернул HTTPListener в класс, который позволял клиентскому коду регистрировать обратные вызовы с помощью действия SOAP, а затем дал этому классу метод Start, который запускает HTTPListener. Вы должны быть в состоянии сделать что-то очень похожее в Python, используя метод getPOST () в BaseHTTPServer для:

  • извлечение действия SOAP из HTTP Заголовки
  • используйте elementtree для извлечения SOAP заголовок и тело SOAP из POST'а HTTP
  • вызвать определенный обратный вызов для Действие SOAP, отправка этих извлеченных значений
  • вернуть текст ответа, указанный обратный вызов в соответствующем SOAP конверт; если обратный вызов поднимает исключение, поймать его и перемотать как ошибка SOAP

Затем вы просто реализуете обратный вызов для каждого действия SOAP, которое получает переданное ему содержимое XML, анализирует его с помощью elementtree, выполняет желаемое действие (или фиктивное действие, если это тестер) и создает необходимый XML-ответ (я был не слишком горд, чтобы просто создать это явно, используя строковую интерполяцию, но вы можете использовать elementtree, чтобы создать это, сериализовав объект ответа Python).

Будет полезно, если вы сможете получить некоторые реальные образцы сообщений SOAP, чтобы не повредить волосы, особенно в той части, где вы создаете необходимый XML-ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...