使用CodeIgniter 创建 RESTful 服务 REST API【原创译文】
翻译之前,先简单介绍下自己的情况,避免误人子弟。。。本人英语不强(不是谦虚,真是很烂),我只是一个简简单单的CI程序猿。在现在到处都是RESTful服务的时代,我想大家都像我这样有一个疑问,怎么让CI机遇RESTful 服务工作呢。。。我上网一搜,发现有篇国外的文章非常不错,我就简单翻译下,纯粹当成备份了。。。
牛人可直接看原文,原文地址:http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/?
在现在这个时代,你很容易把例如blog,CMS等等的服务整合到自己的网站里面。有一件事你也许没想过就是利用CodeIgniter去创建API接口。尝试几个RESTful服务的实现方法后,我发现过程非常麻烦,而且缺少你所期望的一些RESTful的功能。所以我自己建了一个,这个教程将告诉你怎样去利用这些代码创建属于自己的REST?API,而且我将举些例子告诉你如何与自己搭建的API进行交互。
?
这个教程将分成2个部分讲。第一部分将从学习如何搭建RESTful 服务说起,然后深入,第二部分将讲如何用多种方式与自己搭建的REST API交互。
?
?
首先,你需要从Git中下载一份?codeigniter-restserver??代码回来。提取里面的代码,放置你的web server里面(译者注:下载方式如图所示,原作者的图片是Git改版前的,不适用于现在,所以本人斗胆替换掉了)
下载回来解压后,你会发现这已经是一个完整的CodeIgniter框架。这样可以让大家完整的使用这个?REST?demo,而不用添加进自己的文件里才能使用。
打开“application/config/config.php”?,根据自己的情况设置base_url。。(译者注:其实就是CI的根目录的地址,这个我想用过CI的都懂吧。如果你真的什么都不懂,那么你把下载回来后的文件解压,然后重命名为restserver,把整个文件夹丢到WWW根目录下,把base_url设置成如图所示)
?
根据第一步的情况,解压好文件,配置好base_url,我们就已经可以访问已经配置好RESTful的CodeIgniter框架了。。打开你的web server,输入你刚才设置的base_url地址,看看是不是已经可以正常访问啦。。
下面讲解下RESTful 的URL结构。基本情况如图所示:
(译者注:这里的情况我就不多说了,只是说下RESTful的CodeIgniter与正常的情况下URL结构的差异,前面的传值和URL结构都和正常情况下一致,就是在最后添加了一个参数format,这里可以定义返回的类型)
关于format的类型情况,可以看下图
为了让API提供更丰富的格式选择。。。format类型不仅仅只有上图所列举的3个情况,具体的类型如下所示:
更RESTful的发送Content-type http 头部的方式将在后面提到。
?
现在,你打开 “application/controllers/example_api.php”你立即会发现一些与正常CodeIgniter 控制器不同的地方。
在MVC模式中,控制器是逻辑运算的中心。它们在用户请求或从控制器中获取数据时或者是需要输出html时,控制器的方法才会被调用。CodeIgniter?有它自己的逻辑来指挥控制器去怎么工作,但是我们现在情况和CodeIgniter不同,我们需要自己的REST_Controller 类 去指挥 相关的REST 逻辑运算,所以我们需要继承REST_Controller这个控制器。
正常情况下,我们的控制器是这样的
从下载回来的CodeIgniter中找到上图显示的2个文件,具体位置如下:
把这2个文件拷入你现有的项目里面,位置不变。下面的完整项目的控制器demo
}??这是一个通用型的demo,在第一个方法中,我们先把判断是否有id这个参数,如果没有就返回400状态码,如果有则继续执行,让user_model去获取user,有则返回数据,并返回200状态码,没则返回null以及404状态码。
现在,你的API已经建立好了。你需要给予相应的调用权限来保护它。设置登陆权限,用户名密码等可以打开?“application/config/rest.php”文件来修改。
设置为None的话,所有人都可以调用这个API.
设置为Basic的话,是一个相对不安全的登录方法,它应该只用于内部/安全网络.
这是一个更安全的选项,需要加密的用户名和密码,如果你想受保护的API让有权限的人调用,使用这个选项。
?
这个选项中,可以设置用户的账号和密码,账号是array的key,密码则是对应的value;你可以添加尽可能多的有权限调用你的API的用户进来。
?
(译者注:第一部分到此结束。。。有点累,第二部分下次再翻译了。。。预告一下,下一部分主要讲如何建立公开调用的REST API,例如twitter API? , 新浪API? 等等)