Как стать автором
Обновить

Zend_Soap — Как готовить

Время на прочтение4 мин
Количество просмотров1.4K
Недавно передо мной встал вопрос: организовать SOAP Server для некоторых деяний. Задался идеей реализовать это с помощью Zend_Soap, оказалось предельно просто.

Для примера нам понадобится 4 файла:

  1. server.php — собственно сам SOAP сервер
  2. wsdl.php — WSDL
  3. class.php — класс с функциями
  4. client.php — клиент, как пример работы



server.php


require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

include ('class.php');

$server = new Zend_Soap_Server("http://localhost/soap/wsdl.php");
$server->setClass('Server');
$server->handle();
</code>

* This source code was highlighted with Source Code Highlighter.



wsdl.php


require_once 'Zend/Loader.php';
require_once 'class.php';
Zend_Loader::registerAutoload();

$wsdl = new Zend_Soap_AutoDiscover();
$wsdl->setUri('http://localhost/soap/server.php');
$wsdl->setClass('Server');
$wsdl->handle();


* This source code was highlighted with Source Code Highlighter.


server.php — Как видите не несет в себе никакой логики, как и wsdl.php. Они оба ссылаются на класс class.php, в котором уже хранятся функции вызова. Все остальное за вас делает Zend_Soap.

class.php



<?php
class Server {
  
  private $_db;

  /**<br/>
   * Открываем соеденение с базой данных.<br/>
   * Здесь может быть любой другой вам нужный код.<br/>
   */<br/>
  
  function __construct() {
    try {
      $this->_db = new Zend_Db_Adapter_Oracle(array(
        'username'   => 'demo',
        'password' => 'demo',
        'dbname' => '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=tcp.telekom.lv)(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521)))(CONNECT_DATA=(SID=XE)))'
      ));
    } catch(Zend_Exception $e) {
      return array( 'code' => 200,
              'error' => 'Database connection error');
    }
  }
  
  /**<br/>
   * Get Simple Demo Action<br/>
   *<br/>
   * @param array $userData<br/>
   * @param array $requestData<br/>
   * @return array<br/>
   */<br/>
  
  public function getSimpleAction($userData = array(), $requestData = array()) {

    /**<br/>
     * $userData = array('username' => '', 'password' => '')<br/>
     * $requestData = array('value1' => '', 'value2' => '')<br/>
     */<br/>
    
    if (!$this->_checkCredentials($userData)) {
      return array(  'code' => 500,
              'error' => 'Неверный логин или пароль.');
    }

    $array = array();
    
    try {
      /**<br/>
       * Здесь выполняется ваша обработка и кадаются<br/>
       * Zend_Exception если что-то пошло не так.<br/>
       * <br/>
       * throw new Zend_Exception('Error :(', 100);<br/>
       * <br/>
       * Или присваиваются в $array переменные,<br/>
       * которые должны быть возвращенны.<br/>
       * <br/>
       * $array['ok'] = 'true';<br/>
       */<br/>
    } catch (Zend_Exception $e) {
      return array(  'code' => 101,
              'error' => 'Exception: ' . $e->getMessage());
    }
    
    return $array;
  }
  
  private function _checkCredentials($userData) {
    
    /**<br/>
     * Функция для проверки подлинности пользователя<br/>
     * return true/false<br/>
     */<br/>
    
    return true;
  }
  
  /**<br/>
   * Закрыть соеденение с базой данных.<br/>
   */<br/>
  
  function __destruct() {
    $this->_db->closeConnection();
  }
}


* This source code was highlighted with Source Code Highlighter.


Самое главное — это не забывать о комментариях к главным функциям:

/**
   * Get Simple Demo Action<br/>
   *<br/>
   * @param array $userData<br/>
   * @param array $requestData<br/>
   * @return array<br/>
   */
<br/>

* This source code was highlighted with Source Code Highlighter.


Описывать тип параметра то ли это string, array или int. Или любой другой разрешенный.

client.php



require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

$client = new Zend_Soap_Client("http://localhost/soap/wsdl.php");
$userdata = array('username' => 'demoUsername', 'password' => 'demoPassword');
$requestData = array('parameter' => 'value');
print_r($client->getSimpleAction($userdata, $requestData));


* This source code was highlighted with Source Code Highlighter.


С помощью клиента просто проверяем работоспособность.

Вот и все, небольшой брифинг по Zend_Soap пройден. В принципе на такой базе, можно строить практически любые SOAP апликации.
Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии8

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн