用户
 找回密码
 入住 CI 中国社区
搜索
查看: 29185|回复: 30
收起左侧

[程序 App] PHP搭建基于CI框架的REST服务架构

    [复制链接]
发表于 2010-1-12 17:35:52 | 显示全部楼层 |阅读模式
本帖最后由 qzqfirst 于 2010-1-12 18:14 编辑

最近两年,MySpace、Google、Yahoo、Facebook、淘宝和人人网这些互联网企业,都构建了自己的开放平台,打破了“我的地盘我做主”一类的网站建设常规思维,以开放的姿态,构建网络交互的生态圈。而这些开放平台几乎都采用了REST的服务架构。

什么是REST架构?

REST(Representational State Transfer)是一种轻量级的WebService架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。

REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。


REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

PHP搭建基于CodeIgniter框架的REST服务架构

因为最近我们的项目采用了PHP搭建了基于CodeIgniter框架的REST架构,所以我把搭建的经验和代码分享给大家。示例代码见附件。

1、REST服务端访问:
http://localhost/rest/index.php/Example_api/users
访问结果:

<xml>
<item>
<id>1</id>
<name>Some Guy</name>
<email>example1@example.com</email>
</item>
<item>
<id>2</id>
<name>rson Face</name>
<email>example2@example.com</email>
</item>
<item>
<id>3</id>
<name>Scotty</name>
<email>example3@example.com</email>
</item>
</xml>

服务端输出的数据格式包括xml、json、html、csv等,默认为xml,可以根据format的参数设置来控制数据输出格式
http://localhost/rest/index.php/Example_api/users/format/json

2、REST客户端数据读取:
http://localhost/rest/index.php/Rest_test/user_list

具体的代码在此就不做解释了,可以自己查看源代码,有什么问题可以到我的博客,共同交流。

rest.zip (405.75 KB, 下载次数: 1793)

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2014-7-17 17:51:49 | 显示全部楼层
REST_Controller.php文件在我的CodeIgniter2.1.4中怎么没有呀。
发表于 2014-6-9 15:09:15 | 显示全部楼层
感谢楼主分享
 楼主| 发表于 2010-1-13 14:22:10 | 显示全部楼层
多谢管理员加精
发表于 2010-1-18 14:13:17 | 显示全部楼层
优势在哪??没看明白 。XML-RPC我到时看了些
发表于 2010-1-18 21:40:41 | 显示全部楼层
恩..第一次听
发表于 2010-4-8 16:20:47 | 显示全部楼层
作者能给个大概的注释吗?讲下原理也行呀。
发表于 2010-4-8 18:06:57 | 显示全部楼层
我在 example_api中加了
        function tag_post() {
                $message=array('id'=>'1','name'=>'hello');
                $this->responce($message,200);
        }

然后在
rest_test.php中

function new_tag() {

         $categoryname=$this->post('categoryname');
         $code=$this->post('code');
         
                $data=array('categoryname'=>$categoryname,'code'=>$code);
                $responce = $this->rest->post("tag",$data);
                echo "<pre>";
        //print_r($responce);
        echo "</pre>";
        echo $this->rest->debug();

        }

然后运行,就报错了

Errors
Code: 22
Message: HTTP response code said error
发表于 2010-12-29 17:04:33 | 显示全部楼层
楼主, 中文怎么处理?
比如: name 改成了:和绅
<item>
<id>1</id>
<name>和绅</name>
<email>example1@example.com</email>
</item>
http://localhost/rest/index.php/Example_api/users  这样服务器端提供出来是正常的.

但是客户端取到的时候乱码:
http://localhost/rest/index.php/Rest_test/user_list
发表于 2011-1-25 13:23:37 | 显示全部楼层
回复 7# mengfanpp


    编码没处理好.

浏览器输出的时候选择一下编码看看那种合适?
发表于 2011-1-27 15:11:00 | 显示全部楼层
谢谢楼上.
发表于 2011-3-17 00:17:01 | 显示全部楼层
谢谢LZ分享,最近有个项目需要Rest风格

本版积分规则