Хотя не существует сертифицированного стандарта, если вы должны использовать SOAP, Suds - ваш лучший выбор. Suds может быть медленным на больших WSDL, и это то, над чем они работают.
Тем временем, если вы не ожидаете, что ваш WSDL будет часто меняться, у вас есть два варианта, которые могут принести вам большую скорость:
- Загрузка WSDL на localhost
- Использование кеширования
Загрузка вашего WSDL
В случае больших WSDL проблема заключается в том, что сначала вы должны каждый раз загружать WSDL, что может привести к дополнительным расходам. Suds будет загружать и анализировать весь WSDL при запуске, чтобы убедиться, что он не изменился.
Если вы можете загрузить его в локальную систему, а затем передать его конструктору Client
, используя схему file://
в URL-адресе. Поскольку Suds использует urllib2
для транспорта HTTP, это вполне законно.
Теперь, поскольку вы не указали имя хоста в своем URL-адресе WSDL, вам также придется передать аргумент location
, указывающий фактический URL-адрес приложения SOAP.
Вот пример:
from suds.client import Client
# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'
# The WSDL URL, we wont' use this but just illustrating for example. This
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl'
# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url
client = Client(url=wsdl_url, location=soap_url)
Если вам интересно, я использовал этот подход в своей работе и открыл исходный код .
Кэширование вашего WSDL
Другой вариант - использовать превосходную функцию кэширования от Suds . Вы должны явно создать объект кеша, а затем передать его конструктору, используя аргумент cache
. В противном случае по умолчанию используется значение ObjectCache
с продолжительностью 1 день.
Вы также можете рассмотреть возможность использования обоих этих подходов.