Автогенерация WSDL
#php, #xml, #soap, #wsdl
Soap-сервисы часто работают в режиме wsdl на основе соответствующего документа. Это удобно, ведь описание всех возможностей api хранится в одном файле wsdl, ссылку на который можно отправлять всем желающим пользоваться нашим сервисом. Этот документ имеет довольно сложную структуру, поэтому разработчики часто генерируют его он-лайн и очень редко пишут руками. Я же хочу предложить вам способ генерации wsdl-файла динамически и на лету.

WSDL - Web Services Description Language это сердце нашего SOAP-сервиса. С помощью него клиенты получают информацию об адресе сервиса, доступным методам и типам данных, которые нужно передавать. Это значит, что при добавлении нового функционала, его обязательно нужно описывать в этом файле. И тут возникает масса проблем, например, разработчик может запросто забыть обновить wsdl или даже сделать ошибку при редактировании этого документа. В этом случае бизнес рискует потерять много клиентов, а программист показать свой непрофессионализм и может даже быть уволен.
Автогенерация wsdl на лету позволит избежать всех вышеописанных проблем и сделает поддержку SOAP-сервиса значительно удобней. Мой выдуманный сервис будет называться Calculator и будет предоставлять пользователям два метода: sum и prod. Вот как может выглядеть этот класс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php class Calculator { /** * @soap * @param float $a * @param float $b * @return float */ public function sum($a, $b) { return $a+$b; } /** * @soap * @param float $a * @param float $b * @return float */ public function prod($a, $b) { return $a*$b; } } |
Обратите внимание на комментарии, именно они позволят нам использовать функционал автогенерации, и самое главное: в wsdl-файле будут отображены лишь те методы, которые отмечены @soap.
Для создания wsdl-документа на лету мы будем использовать библиотеку php2wsdl. Её удобно можно установить через консоль и composer.
composer require php2wsdl/php2wsdl
Осталось создать файл calculator_wsdl.php, в который необходимо поместить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // подключаем автолодер composer include "vendor/autoload.php"; // отдаем тип xml header('Content-Type: text/xml'); // наш класс-сервис $class = "Calculator"; // адрес сервиса $serviceURI = "http://localhost/calculator.php"; // создание объекта генератора $wsdlGenerator = new PHP2WSDL\PHPClass2WSDL($class, $serviceURI); // парсинг с использованием комментариев $wsdlGenerator->generateWSDL(true); // выводим результат echo $wsdlGenerator->dump(); |
Теперь вы можете делиться с клиентами сервиса ссылкой на новый файл и никогда не беспокоиться об его актуальности, ведь теперь он генерируется автоматически. А если хотите прокачать свои знания сервисов, то записывайтесь на курс PHP-Создание сервисов.