Статьи

Создание веб-сервисов с помощью PHP и SOAP, часть 2

В первой части этой серии я показал вам, как разработка приложений с использованием протокола SOAP является отличным способом создания совместимого программного обеспечения. Я также продемонстрировал, как легко создать собственный SOAP-сервер и клиент с помощью библиотеки NuSOAP. На этот раз я хотел бы познакомить вас с тем, с чем вы наверняка столкнетесь при работе с файлами SOAP — WSDL.

В этой статье мы поговорим о том, что такое файлы WSDL и как их использовать. Я покажу вам, как быстро создать файлы WSDL с помощью NuSOAP и включить файл WSDL в сервер SOAP и примеры клиентов из первой части.

Что такое файлы WSDL?

Файлы языка описания веб-служб (WSDL) представляют собой документы XML, которые предоставляют метаданные для службы SOAP. Они содержат информацию о функциях или методах, которые приложение делает доступными и какие аргументы использовать. Предоставляя доступ к файлам WSDL пользователям вашей службы, он дает им определения, необходимые для отправки действительных запросов, в точности так, как вы этого хотите. Вы можете думать о файлах WSDL как о полном контракте для связи приложения. Если вы действительно хотите, чтобы другие могли легко использовать ваш сервис, вы захотите включить WSDL в свое программирование SOAP.

Структура WSDL

Как и сообщения SOAP, файлы WSDL имеют особую схему, которую необходимо придерживаться, и определенные элементы, которые должны быть на месте, чтобы быть действительными. Давайте рассмотрим основные элементы, которые составляют действительный файл WSDL, и объясним их использование.

<definitions> <types> ........ </types> <message> <part></part> </message> <portType> ....... </portType> <binding> .... </binding> <service> .... </service> </definitions> 

Корневым элементом файла WSDL является элемент definitions . Это имеет смысл, поскольку файл WSDL по определению является определением веб-службы. Элемент types описывает тип используемых данных, который в случае WSDL использует XML-схему. В элементе messages находится определение элементов данных для сервиса. Каждый элемент messages может содержать один или несколько элементов part . Элемент portType определяет операции, которые можно выполнять с вашим веб-сервисом, и используемые сообщения ответа на запрос. В пределах элемента binding содержит спецификацию протокола и формата данных для конкретного portType . Наконец, у нас есть service элемент, который определяет коллекцию Сервисный элемент содержит URI (местоположение) сервиса.

Терминология немного изменилась при именовании некоторых элементов в спецификации WSDL 2.0. portType , portType изменил свое имя на Interface . Поскольку поддержка WSDL 2.0 слаба, я решил перейти на версию 1.1, которая используется более широко.

Создание файла WSDL

Файлы WSDL могут быть громоздкими при написании вручную, поскольку они должны содержать определенные теги и, как правило, довольно длинные. Хорошая вещь об использовании NuSOAP в том, что он может создать файл WSDL для вас! Давайте изменим SOAP-сервер, который мы создали в первой статье, чтобы приспособиться к этому.

Откройте productlist.php и измените его, чтобы отразить код ниже:

 <?php require_once "nusoap.php"; function getProd($category) { if ($category == "books") { return join(",", array( "The WordPress Anthology", "PHP Master: Write Cutting Edge Code", "Build Your Own Website the Right Way")); } else { return "No products listed under that category"; } } $server = new soap_server(); $server->configureWSDL("productlist", "urn:productlist"); $server->register("getProd", array("category" => "xsd:string"), array("return" => "xsd:string"), "urn:productlist", "urn:productlist#getProd", "rpc", "encoded", "Get a listing of products by category"); $server->service($HTTP_RAW_POST_DATA); 

По сути, это тот же код, что и раньше, но только с несколькими изменениями. Первое изменение добавляет вызов configureWSDL() ; метод действует как флаг, сообщающий серверу сгенерировать файл WSDL для нашего сервиса. Первый аргумент — это имя службы, а второй — пространство имен для нашей службы. Обсуждение пространств имен на самом деле выходит за рамки этой статьи, но имейте в виду, что, хотя мы не используем их здесь, такие платформы, как Apache Axis и .NET. Лучше включать их, чтобы они были полностью совместимы.

Второе изменение добавляет дополнительные аргументы в метод register (). Разбивая это:

  • getProd — имя функции
  • array("category" => "xsd:string") определяет входной аргумент для getProd и его тип данных
  • array("return" => "xsd:string") определяет возвращаемое значение функции и ее тип данных
  • urn:productlist определяет пространство имен
  • urn:productlist#getProd определяет действие SOAP
  • rpc определяет тип вызова (это может быть rpc или document )
  • encoded определяет значение для атрибута use (можно использовать encoded или literal )
  • Последний параметр является строкой документации, которая описывает, что getProd функция getProd

Теперь укажите вашему браузеру http://yourwebroot/productlist.php?wsdl и вы увидите новый файл WSDL, созданный для вас. Идите дальше, скопируйте этот источник и сохраните его как собственный файл с именем products.wsdl и поместите его в свой веб-каталог.

Использование файлов WSDL с клиентом

Мы изменили сервер SOAP для генерации файла WSDL, поэтому теперь давайте изменим клиент SOAP для его использования. Откройте productlistclient.php созданный в предыдущей статье, и просто измените строку, которая инициирует клиента, следующим образом:

 $client = new nusoap_client("http://localhost/nusoap/productlist.php"); 

к этому:

 $client = new nusoap_client("products.wsdl", true); 

Второй параметр в nusoap_client() конструктора nusoap_client() указывает NuSOAP построить клиент SOAP для приема файла WSDL. Теперь запустите productlistclient.php в вашем браузере, и вы увидите тот же результат, что и раньше, но теперь вы используете мощь WSDL!

Резюме

Во второй части этой серии статей о создании веб-сервисов с помощью PHP и SOAP мы рассмотрели важность использования файлов WSDL для оптимальной совместимости. Мы говорили о различных элементах, составляющих файл WSDL, и об их определениях, а затем я показал вам, как быстро и легко создавать свои собственные файлы WSDL с помощью библиотеки NuSOAP. Наконец, мы изменили наш SOAP-сервер и клиент, чтобы продемонстрировать, как использовать WSDL в ваших приложениях.

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

Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить об этом на наших форумах ?

Изображение через Лилиану Виноградову / Shutterstock