Міжнародна конференція розробників
і користувачів вільного програмного забезпечення

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

Мартынов И.И. – IPonWEB – ilya@iponweb.net

LVEE 2006

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

ЧТО ТАКОЕ ВЕБ-СЕРВИС

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

СТАНДАРТЫ НА КОТОРЫХ ОСНОВАНЫ ВЕБ-СЕРВИСЫ

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

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

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

Поддержка WSDL в SOAP и является одним из основных плюсов 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 генераторов для стандартного
расширения. Интересной особенностью подобных WSDL генераторов является
тот факт, что PHP, как язык без статической типизации, не
предоставляет достаточно информации для генерации WSDL, так как в PHP
попросту отсутствует информация о получаемых и принимаемых типах
данных. Чтобы разрешить эту проблему, WSDL генераторы используют
информацию их phpdoc комментариев, которые могут описывать типы
принимаемых и возвращаемых значений.