Pull to refresh

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

Lumber room
Недавно передо мной встал вопрос: организовать 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:zend frameworkzend_soap
Hubs: Lumber room
Total votes 4: ↑4 and ↓0+4
Views589

Popular right now

Top of the last 24 hours