TPRestfull尝鲜

首先,感谢流年,感谢Rest原创者Roy Fielding,感谢TVB,感谢CCTV,感谢我的父母、兄弟姐妹和乡亲们,以下省去10万毫无意义的致谢词……
接下来让我们来体验一下TPRestfull,不过再此之前,还不知道什么叫Rest的童鞋们,可以点击这个链接去了解一下。
http://zh.wikipedia.org/wiki/REST

已经了解过了吗?好吧,让我们开始吧!

一、TPRestfull的原理
根据不同的请求方式(REQUEST_MODE)和资源标识(resource identifier)把请求转发到相应的操作(action)。

二、使用TPRestful
要使用Rest模式,需要在项目的入口文件中添加模式定义:
define(‘THINK_MODE’,’Rest’); // 采用Rest部署

三、例子

<?php
class IndexAction extends Action
{
    // request: curl http://localhost/index.php/Index/user
    // request: curl http://localhost/index.php/Index/user -XGET
    // retval:  Index::user_get
    public function user_get(){
        echo __METHOD__;
        $this->display();
    }

    // request: curl http://localhost/index.php/Index/user -XPOST
    // retval:  Index::user_post
    public function user_post(){
        echo __METHOD__;
    }

    // request: curl http://localhost/index.php/Index/user -XPUT
    // retval:  Index::user_put
    public function user_put(){
        echo __METHOD__;
    }

    // request: curl http://localhost/index.php/Index/user -XDELETE
    // retval:  Index::user_delete
    public function user_delete(){
        echo __METHOD__;
    }

    // request: curl http://localhost/index.php/Index/product.xml
    // retval:  Index::product_xml
    public function product_xml(){
        echo __METHOD__;
    }

    // request: curl http://localhost/index.php/Index/product.json
    // retval:  Index::product_json
    public function product_json(){
        echo __METHOD__;
    }
}
?>

四、几点困惑
1、当存在Index::user()后,Restful就失效了,通过Rest方式统一访问到Index::user(),既然Restful的特色是可以根据请求类型和资源类型访问不同操作,那么是不是应该优化Restful访问呢?
2、通过URL可以直接访问到Index::user_post等操作?
3、通过浏览器访问 http://localhost/index.php/Index/user 获取到的模板文件名为user.html,而访问 http://localhost/index.php/Index/user_get得到的模板名却为user_get.html?通过CURL通过get、post等不通请求方式获取的都是同一个模板user.html?
4、TPRestfull优先请求方式再到资源方式?访问/Index/user.xml和/Index/user.json的结果都是Index::user_get。

五、感谢
非常感谢您能坚持看到这里,谢谢!欢迎来喷!

RESTfull模式实现

什么是REST?
  REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。
  REST 描述了一个架构样式的互联系统(如 Web 应用程序)。REST 约束条件作为一个整体应用时,将生成一个简单、可扩展、有效、安全、可靠的架构。由于它简便、轻量级以及通过 HTTP 直接传输数据的特性,RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案。用于 web 服务和动态 Web 应用程序的多层架构可以实现可重用性、简单性、可扩展性和组件可响应性的清晰分离。Ajax 和 RESTful Web 服务本质上是互为补充的。开发人员可以轻松使用 Ajax 和 RESTful Web 服务一起创建丰富的界面。

传统请求模式

// 列举出所有的用户
GET request to /users/list
// 列出ID为1的用户信息
GET request to /users/show/id/1
// 插入一个新的用户
POST request to /users/add
// 更新ID为1的用户信息
POST request to /users/mdy/id/1
// 删除ID为1的用户
POST request to /users/delete/id/1

RESTful请求模式

// 列举出所有的用户
GET request to /users
// 列出ID为1的用户信息
GET request to /users/1
// 插入一个新的用户
POST request to /users
// 更新ID为1的用户信息
PUT request to /users/1
// 删除ID为1的用户
DELETE request to /users/1