Что такое web служба - Описание с помощью WSDL

Что такое web служба - Описание с помощью WSDL

Индекс материала
Что такое web служба
Описание с помощью WSDL
Создание Web-служб
Все страницы

Описание с помощью WSDL

SOAP работает очень хорошо, если о Web-службе все известно. Однако это не всегда так. Средством описания интерфейса для доступа к Web-службе является язык WSDL (Web Services Description Language — язык описания Web-служб). Этот стандарт совместно разработан компаниями IBM, Microsoft и webMethods. У каждой из этих трех компаний был собственный подход к разработке стандарта для описания Web-служб: IBM создала NASSL, Microsoft разработала SCL, а компания webMethods придумала WIDL.

Результатом их сотрудничества стала версия 1.1 языка WSDL, По поводу W3C следует отметить, что так же как и с SOAP, консорциум W3C на основе версии 1.1 разработал версию WSDL 1.2, которая теперь является рекомендацией W3C. WSDL-описание Web-службы содержит всю необходимую для использования этой службы информацию, включая доступные методы и их параметры. Эта информация содержится в следующих пяти элементах:

  • <binding> - поддерживаемые протоколы.
  • <message> - сообщения Web-службы (запрос, ответ).
  • <portType> — все доступные методы.
  • <service> — URI службы.
  • <types> — используемые типы данных.

Вся эта информация хранится в корневом элементе WSDL-описания <deЈinitions>, В листинге ниже представлен пример WSDL-описания Web-службы.

WSDL-описание Web-службы


  <?xml version="1.0" encoding="UTF-8"?>
  <definitions name="Guid"
  targetNamespace="http://www.hauser-wenz.de/Guid/"
  xmlns:tns="http://www.hauser-wenz.de/Guid/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlnsгwsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns="http://schemas.xmlsoap.org/wsdl/">
  
      <message name="getGuidResponse">
          <part name="Result" type="xsd:string" />
      </message>
      
      <message name="getGuidRequest">
          <part name="prefix" type="xsd:string" />
      </message>
      
      <portType name="GuidPortType">
          <operation name="getGuid" parameterOrder="prefix">
              <input message="tns:getGuidRequest"/>
              <output message="tns:getGuidResponse" />
          </operation>
      </portType>
      
      <binding name="GuidEinding" type="tns:GuidPortType">
      
          <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
          
          <operation name="getGuid">
          
              <soap:ореration soapAction="urn:php5unleashed-guid#getGuid"/>
              
              <input>
                  <soap:body use="encoded" namespace="urn:php5unleashed-guid"
                  encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" />
              </input>
              
              <output>
                  <soap:body use="encoded" namespace="urn:php5unleashed-guid"
                  encodingstуle="http://schemas.xmlsoap.org/soap/encoding/" />
              </output>
              
          </operation>
          
      </binding>
      
      <service name="GuidService"
          <port name="GuidPort" binding="tns:GuidBinding">
              <soap:address location="http://localhost/php/guid-server.php"/>
          </port>
      </service>
      
  </definitions>

Да уж... без стаканА не разберёшся, а ведь это один из самых простеньких(!) WSDL файлов. К сожалению, один из недостатков SOAP-расширения для РНР 5 связан с тем, что в отличие от других реализаций SOAP, оно не позволяет создавать WSDL-описания автоматически (во всяком случае, пока что). Наверняка этот недостаток исправят в будущих версиях РНР.

Кстати!

Для автоматического создания WSDL-описания вы можете использовать альтернативные реализации протокола SOAP в РНР:

Поиск в справочнике с помощью UDDI

Теперь, после того как мы знаем, как получать информацию о Web-службе и как ее запрашивать, нужно научиться находить такую службу. Для этой цели существует нечто похожее на "Желтые страницы", а именно — реестры UBR (Universal Business Registries - универсальные бизнес-реестры) - справочники Web-служб.

Существует несколько таких реестров, среди которых реестры компаний IBM, Microsoft, NTT-Com и SAP. Эти реестры синхронизируют свои данные, поэтому можно пользоваться любым из них. Текущей версией стандарта UDDI является версия UDDI 3.0, хотя большинство реализаций используют версию 2. Среди разработчиков этого стандарта такие компании-гиганты, как HP, Intel, Microsoft и Sun.

Для взаимодействия с UBR существует два типа API-интерфейсов: Inquiry API и Publish API. Интерфейс Inquiry API (Запрос) предназначен для запроса служб в реестрах UBR, а интерфейс Publish API (Публикация) позволяет разработчикам регистрировать свои службы. Похоже, что заполнение содержимого реестров спамом — это только вопрос времени :)

Кстати!

Существуют тестовые реестры, предназначенные для тестирования регистрации служб перед их размещением в "настоящих" реестрах.

Так выглядит запрос Web-службы:


<?xml version="l.0" encoding="utf-8"?>
<Envelope xmlns="http://scheinas.xinlsoap,org/soap/envelope/">
<Body>

    <find_business maxRows="25" xmlns="urn:uddi-org:api_v2" generic="2.0">

        <findQualifiers>
            <findQualifier>sortByNameAsc</findQualifier>
            <findQualifier>sortByDateDesc</findQualifier>
        </findQualifiers>

        <name>%guid%</name>

    </find_business>
    
</Body>
</Envelope>

В примере выше видно, что UDDI-запрос инкапсулирован в SOAP-сообщение, поэтому выглядит он довольно знакомым. Ответом на запрос является также SOAP-документ, показанный ниже:


  <?xml version="1.0" encoding="UTF-8" ?>
  <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP:Body>
  
  <businessList generic="2.0" xmlns="urn:uddi-org:api_v2" operator="www.ibm.com/services/uddi" truncated="false">
      <businessInfos>
          <businessInfo businessKey="DEFBD260-4CD5-llDe-B936-000629DCQA53">
          
              <name xml:lang="en">Web Services Guided Tour</name>
  
              <description xml:lang="en">Sample Web services for Guided Tourbook</description>
  
              <serviceInfos>
                  <serviceInfo serviceKey="2A839AS0-4CEl-llDS-B936-O0Q629DC0A53" businessKey="DEFBD2e0-4CD5-llDB-B936-00O629DC0A53">
                      <name xml:lang="en">Guided Tour StockQuote Service</name>
                  </serviceInfo>
              </serviceInfos>
              
          </businessInfo>
      </businessInfos>
  </businessList>
  
  </SOAP:Body>
  </SOAP:Envelope>

Установка

Установить SOAP-расширение для PHP5 довольно легко. В Windows этот модуль находится в подкаталоге ext каталога установки РНР. Для его использования необходимо в файл php.ini добавить следующую строку: extension=php_soap.dll Для работы этому модулю требуется , которая включена в РНР 5 по умолчанию, по крайней мере, в Windows-версии.

В Unix/Linux/Mac потребуется установить библиотеку libxml версии не ниже 2.5.4 Кроме того, при конфигурировании РНР необходимо указать ключ --enable-soap



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 135 гостей онлайн