Pull to refresh

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

Reading time4 min
Views1.3K
Недавно передо мной встал вопрос: организовать 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 апликации.
Tags:
Hubs:
+4
Comments8

Articles