Клиенты SOAP без WSDL
Я пытаюсь разобраться с помощью Стандартной бизнес-отчетности (SBR). Он использует SOAP и ebXML(ebms3).
Они дали этот XML в качестве примера
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<eb:Messaging xmlns:eb="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="true" wsu:Id="soapheader-1">
<ns2:UserMessage xmlns:ns2="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/">
<ns2:MessageInfo>
<ns2:Timestamp>2018-01-07T23:01:31.592Z</ns2:Timestamp>
<ns2:MessageId>A1515366089895.d1b7047b-2e8e-4fa1-81f0-c3eec198bddb@1515366089897</ns2:MessageId>
</ns2:MessageInfo>
<ns2:PartyInfo>
<ns2:From>
<ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">67094544519</ns2:PartyId>
<ns2:Role>http://sbr.gov.au/ato/Role/Business</ns2:Role>
</ns2:From>
<ns2:To>
<ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">51824753556</ns2:PartyId>
<ns2:Role>http://sbr.gov.au/agency</ns2:Role>
</ns2:To>
</ns2:PartyInfo>
</ns2:UserMessage>
</eb:Messaging>
…
</soapenv:Header>
<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="soapbody"></soapenv:Body>
</soapenv:Envelope>
Насколько я понимаю, многие библиотеки SOAP используют WSDL для создания клиента, который можно вызывать перечисленными службами. Однако я не могу найти WDSL для этого.
Нужно ли для SOAP API иметь WDSL? и вы можете прогрессировать без одного?
2 ответа
Желательно использовать WSDL для генерации кода на стороне клиента, обычно так вызываются сервисы SOAP.
Однако можно вызвать сервис SOAP, вообще не обращаясь к WSDL. Это может быть необходимо, если используемый вами технологический стек не поддерживает обработку файлов WSDL. Вы можете просто использовать curl для доступа к некоторым сервисам SOAP. Хотя я хотел бы подчеркнуть, что более сложные API-интерфейсы SOAP было бы сложно использовать без генерации клиентского кода из WSDL.
Пример вызова службы SOAP с использованием curl:
Создайте файл getcities.xml с содержанием ниже:
getcities.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetCitiesByCountry xmlns="http://www.webserviceX.NET">
<CountryName>France</CountryName>
</GetCitiesByCountry>
</soap:Body>
</soap:Envelope>
А затем вызовите curl следующим образом:
curl -v -X POST --data @getcities.xml -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: http://www.webserviceX.NET/GetCitiesByCountry" http://www.webservicex.net/globalweather.asmx
Вызовы SOAP - это на самом деле просто запросы HTTP POST (почти во всех случаях) с телом XML.
Да, и по соглашению WSDL доступен по URL-адресу службы SOAP с параметром WSDL, например
https://somesoapprovider.net/soapservice?WSDL.
например
http://www.webservicex.net/globalweather.asmx?WSDL
Обратите внимание, что ebMS3/AS4 основан на SOAP и использует его модель и структуры обработки, но это собственная спецификация протокола обмена сообщениями. Хотя спецификации ebMS3/AS4 также используют WS-Security, это не обычный веб-сервис, поскольку существуют дополнительные требования к обработке. Например, в отношении реализации надежного обмена сообщениями с использованием сообщений ebMS Receipt.
Поэтому для реализации обмена сообщениями ebMS3/AS4 в вашем решении принято использовать реализацию поставщика программного обеспечения. Доступно много реализаций, включая поддерживаемые с открытым исходным кодом. Однако для австралийского SBR следует учитывать, что иногда включается расширение к спецификациям AS4, которое требует включения токенов SAML в заголовок WS-Security сообщения. Это расширение не всегда поддерживается.