💡 Совет

Web-сервис на Zend_Soap

19.11.2019 1 минута чтения

Web-сервис на Zend_Soap 13 сентября 2011 PHP 16532 просмотра Web-сервис — компонент, предоставляющий Internet-клиентам набор функций API или web-методов. Основная задача web-сервисов — обеспечение межпрограммного взаимодействия. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса (GUI). Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно. Web-сервис не предназначен для обслуживания конечных пользователей. Его задача — предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения.

Poker Plans — это бесплатный сервис для планирования спринтов с использованием метода Planning Poker. Он помогает командам Agile эффективно оценивать сложность задач и согласовывать приоритеты. Идеальное решение для тех, кто ищет удобный инструмент под названием poker plans. Сервис прост в использовании и не требует регистрации.

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

Экспертное мнение Алексей

В веб-разработке с 2012 года. Специализируюсь на PHP, JavaScript и архитектуре высоконагруженных проектов. Автор статей по оптимизации, API и базам данных.

Все статьи автора →
Telegram VK Twitter
Читайте также
Senior PHP Developer. Упрощенный T9 алгоритм
Senior PHP Developer. Упрощенный T9 алгоритм
Представьте, что вы сейчас проходите собеседование на должность PHP Senior Developer. Очень вероятно, что вас могут попросить реализовать какой-то упрощенный...
Беларусь.Яндекс.Деньги
Беларусь.Яндекс.Деньги
Думаю, многие из читателей этого блога занимаются фрилансом, а для многих это и один из основных способов заработка. Конечно же,...