Web-сервис на Zend_Soap 13 сентября 2011 PHP 16532 просмотра Web-сервис — компонент, предоставляющий Internet-клиентам набор функций API или web-методов. Основная задача web-сервисов — обеспечение межпрограммного взаимодействия. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса (GUI). Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно. Web-сервис не предназначен для обслуживания конечных пользователей. Его задача — предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения.
В этой статье мы напишем простой web-сервис для платежной системы. Наша цель – создать API, которым могли бы пользоваться клиенты не зависимо от платформы. Будем использовать SOAP протокол. Zend_Soap выбран не зря. Это прекрасная библиотека для создания web-сервисов. Она избавляет нас от нужды «ручками» описывать WSDL (язык описания web-сервисов и доступа к ним, основанный на языке XML).
Для начала опишем наш web-сервис.
require 'PaymentSystem.php'; // Подключаем бизнес-модель class PaymentSystemService { /** * @param int $creditCardNumber * @param float $amount * @return int (0|1) */ public function pay($creditCardNumber, $amount) { return PaymentSystem::pay($creditCardNumber, $amount); } /** * @param int $creditCardNumber * @return string */ public function getStatus($creditCardNumber) { return PaymentSystem::getStatus($creditCardNumber); } }
Обязательно нужно указывать типы входных и выходных параметров, для того чтобы Zend_Soap сформировал WSDL. В классе PaymentSystem находятся такие же методы, только статические. В них заложена реализация web-сервиса. В классе PaymentSystemService – только описание.
class PaymentSystem { public static function pay($creditCardNumber, $amount) { try { // ... } catch (Exception $e) { return 0; } return 1; } public static function getStatus($creditCardID) { $status = 'valid'; // Статус определяется бизнес-логикой return $status; } }
Сервер, к которому будут обращаться клиенты (server.php файл).
require 'PaymentSystemService.php'; $wsdlURI = 'http://example.com/server.php?WSDL'; if (isset($_GET['WSDL'])) { require 'Zend/Soap/AutoDiscover.php'; $autodiscover = new Zend_Soap_AutoDiscover(); $autodiscover->setClass('PaymentSystemService'); $autodiscover->handle(); } else { require 'Zend/Soap/Server.php'; $soap = new Zend_Soap_Server($wsdlURI, array('cache_wsdl' => 0)); $soap->setClass('PaymentSystemService'); $soap->handle(); }
По этому адресу можно будет просмотреть WSDL сервера, который сформирует Zend_Soap.
http://example.com/server.php?WSDL
Это код клиента, который знает о нашем сервисе и хочет внедрить наше API к себе в интернет-магазин.
require 'Zend/Soap/Client.php'; $wsdlURI = 'http://example.com/server.php?WSDL'; $client = new Zend_Soap_Client($wsdlURI, array('cache_wsdl' => 0)); $client->pay(4111112222233333, 123.6); $client->getStatus(4111112222233333);
В роли клиента не обязательно должен выступать PHP. Вы можете сделать клиент на ASP.NET или другой платформе. Пример был написан для ознакомления, а не для реального использования. Надеюсь, моя статья поможет вам написать свой крутой сервис, которым будут пользоваться миллионы.