REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。 如果考虑使用它的 Web 服务的数量,REST 近年来已经成为最主要的 Web 服务设计模型。 事实上,REST 对 Web 的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计。
基于 REST 的 Web 服务的主要特征之一是以遵循 RFC 2616 定义的协议的方式显式使用 HTTP 方法。例如,HTTP GET 被定义为数据产生方法,旨在由客户端应用程序用于检索资源以从 Web 服务器获取数据,或者执行某个查询并预期 Web 服务器将查找某一组匹配资源然后使用该资源进行响应。
REST 要求开发人员显式地使用 HTTP 方法,并且使用方式与协议定义一致。 这个基本 REST 设计原则建立了创建、读取、更新和删除(create, read, update, and delete,CRUD)操作与 HTTP 方法之间的一对一映射。 根据此映射:
1)若要在服务器上创建资源,应该使用 POST 方法。
2)若要检索某个资源,应该使用 GET 方法。
3)若要更改资源状态或对其进行更新,应该使用 PUT 方法。
4)若要删除某个资源,应该使用 DELETE 方法。
客户端:
<?php
$base_url = 'http://www.jb200.com/';
$client = new Zend_Rest_Client($base_url);
// 设置全局变量
$headers = array();
$client->headers($headers);
// 远程调用, 调用sayHello接口,传递两个字符串参数
$response = $client->sayHello('Hello', 'world!')->get();
if ($this->_request->getParam('debug')) {
echo "<pre>";
print_r(json_decode($response, 1));
echo "</pre>";
} else {
echo $response;
}
服务器端:
<?php
// 捕获请求头信息
$headers = $this->_request->getParam('headers');
Zend_Registry::set('headers', $headers);
$server = new Zend_Rest_Server();
$server->setClass('Lijiabeibei_Blog');
$server->handle();
//接口处理类:(Lijiabeibei_Blog)
class Lijiabeibei_Blog {
protected $retval = array();
function __construct() {
}
/**
* 测试接口
* @param string $a
* @param string $b
*/
function sayHello($a, $b) {
if (!$this->retval['success']) {
$this->retval['debug']= print_r(
Zend_Registry::get('headers'), 1
);
return json_encode($this->retval);
}
$this->retval['debug'] = $a .' '.$b;
return json_encode($this->retval);
}
}
如果要设置多个服务类,可以这样:
$server = new Ylili_Rest_Server();
$server->setClass('Lijiabeibei_Blog');
$server->setClass('Lijiabeibei_Shop);
注意,多个服务器类的方法命名不要冲突。