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 или другой платформе. Пример был написан для ознакомления, а не для реального использования. Надеюсь, моя статья поможет вам написать свой крутой сервис, которым будут пользоваться миллионы.