новости
статьи
.решения

опыт разработки SOAP веб-сервиса c PHP5

Автор делится своим опытом разработки SOAP веб-сервисов, используя PHP 5.x в качестве серверной платформы. Кратко описано понятие веб-сервиса, используемые стандарты и протоколы. Освещается специфика процесса разработки веб-сервисов. Затрагиваются особенности разработки SOAP веб- сервисов на платформе PHP 5.

что такое веб-сервис

Развитие сети Интернет привело к созданию огромного количества веб-сайтов, представляющих услуги различного рода: поиск и предоставление информации, удаленное хранение информации, онлайн-торговля и т.д. Интерфейс сайтов ограничен рамками HTML. Для использования такой услуги из приложений нужен альтернативный программный интерфейс. По сути веб-сервис - это и есть программный интерфейс, использующий HTTP как транспортный уровень.

стандарты, на которых основаны веб-сервисы

Существует несколько способов построения веб-сервисов. Различаются они тем, как именно представлены HTTP-запросы клиента и ответы сервера. Самые ранние веб-сервисы часто использовали в качестве языка запросов простые GET/POST-запросы, схожие с теми, которые посылает веб-браузер при отправке веб-формы, а в качестве ответов как правило использовались XML-документы. Сервисы, построенные таким образом, часто называют REST- сервисами.

Необходимость стандартизировать способ представления запросов и ответов для веб-сервисов привела к созданию стандарта SOAP. Хотя аббревиатура SOAP и расшифровывается как "Simpe Object Access Protocol", это стандарт никак нельзя назвать простым, из-за того что его создатели пытались запихнуть в него как можно больше разных возможностей.

Одним из стандартов, сопутствующих SOAP, является формат WSDL. Это XML-формат для подробного описания веб-сервисов, которое однозначно определяет, какие операции данных сервис предоставляет, какие типы данных каждая операция принимает на вход и какие типы данных она возвращает. Поддержка WSDL является одним из основных плюсов SOAP как стандарта. Это позволяет создавать общие библиотеки для создания и работы с веб- сервисами, в которых особенности транспортного уровня почти полностью скрыты от пользователя. Пользователь уже работает не на уровне HTTP и XML, а на уровне вызовов операций над объектами. Минусом связки SOAP+WSDL является большая громоздкость протокола.

выбор стандарта

Практика показывает, что среди разработчиков, использующих "скриптовые" языки (Perl, PHP, Python, Ruby, Javascript) наиболее популярен REST- формат. Возможная причина заключена в том, что "скриптовые" языки более приспособлены к обработке текстовых данных, и возможности SOAP+WSDL по автоматической конвертации типизированных данных в XML-документы не востребованы.

Так же, как правило, для простых веб-сервисов, которые ориентированы на поиск и получение информации (то есть на чтение), лучше приспособлен REST-протокол.

особенности процесса разработки веб-сервиса

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

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

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

необходимые инструменты

В отличие от веб-сайта, единственный способ протестировать программный интерфейс, коим является веб сервис, это написание тестовых клиентских приложений. За исключением простейших случаев, наличие набора автоматических функциональных тестов c покрытием программного интерфейса близким к 100% - это единственный способ минимизировать число ошибок в коде до приемлемого уровня и обеспечить быструю разработку. Отдельным плюсом наличия таких тестов является легкая возможность отследить внесение обратно-несовместимых изменений в веб-сервис.

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

Для веб-сервисов часто необходимо поддерживать сразу несколько версий. В подобных случаях очень удобно использовать системы контроля версий, которые позволяют вести параллельную разработку в нескольких ветвях.

документирование

Для веб-сервисов очень важна качественная документация по всему интерфейсу. В отличие от программной библиотеки у пользователя нет возможности посмотреть исходный код веб-сервиса, поэтому документация оказывается его единственным источником информации.

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

поддержка SOAP В PHP

Для PHP4 не существовало стандартной библиотеки, поддерживающей протокол SOAP. Впрочем, существуют сторонние библиотеки, такие как NuSOAP и PEAR SOAP. Обе они написаны на PHP, и поэтому считаются довольно медленными.

Начиная с PHP5 появилось стандартное расширение soap, поставляемое вместе с дистрибутивом PHP5. Это расширение полностью написано на C и поэтому считается, что оно обладает лучшей производительностью. Одним из преимуществ NuSOAP, PEAR SOAP является поддержка автоматической генерации WSDL- описания, в то время как стандартное расширение требует ручного создания WSDL-описаний.

Существует несколько сторонних WSDL-генераторов для стандартного расширения. Их интересной особенностью является тот факт, что PHP, как язык без статической типизации, не предоставляет достаточно информации для генерации WSDL, так как в PHP попросту отсутствует информация о получаемых и принимаемых типах данных. Чтобы разрешить эту проблему, WSDL-генераторы используют информацию из комментариев phpdoc, которые могут описывать типы принимаемых и возвращаемых значений.



Илья Мартынов, IPonWEB, ilya@iponweb.net
обсудить статью
© сетевые решения
.
.