Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2105431
  • 博文数量: 194
  • 博客积分: 6450
  • 博客等级: 准将
  • 技术积分: 2085
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-06 13:39
文章分类

全部博文(194)

文章存档

2013年(38)

2012年(11)

2011年(1)

2010年(1)

2009年(4)

2008年(13)

2007年(18)

2006年(63)

2005年(45)

我的朋友

分类: 系统运维

2012-11-05 16:31:42

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 方法之间的一对一映射。 根据此映射:
?    若要在服务器上创建资源,应该使用 POST 方法。
?    若要检索某个资源,应该使用 GET 方法。
?    若要更改资源状态或对其进行更新,应该使用 PUT 方法。
?    若要删除某个资源,应该使用 DELETE 方法。
客户端:
        $base_url = '';
        $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 "
";
             print_r(json_decode($response, 1));
             echo "
";
         } else {
            echo $response;
         }
服务器端:
            // 捕获请求头信息
            $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);
注意,多个服务器类的方法命名不要冲突。

阅读(1332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~