步骤3 分析example_api.php
接下来,我们打开application/controllers/example_api.php文件,仔细分析其代码。
首先,在CodeIgniter中,我们要继承CodeIgniter框架本身的REST_Controller.php(这个文件位于libraries目录中),如下所示:
require(APPPATH".libraries/REST_Controller.php");
class Example_api extends REST_Controller {
}
接着我们看其中两个获得资源的方法,分别是user_get()和users_get(),其中user_get()是根据用户id去获得某个用户的信息,而users_get()则获得多个用户的信息,代码框架如下:
php
require(APPPATH".libraries/REST_Controller.php");
class Example_api extends REST_Controller {
function user_get()
{
// 获得一个用户的信息
}
function users_get()
{
//获得多个用户的信息
}
}
接着我们复习下在RESTful架构中的四类关于资源的操作。
GET:
使用GET去获得一个已经存在的资源的信息。通常我们在浏览器中输入url其实即发出了一个GET的请求。
POST:
使用POST去更新一个已经存在的资源。比如表单中的提交数据行为,都属于POST类型。
PUT:
使用HTTP的报文头的PUT,可以去新建一种资源,目前不是所有浏览器支持,所以本文不作讨论。
DELETE:
使用DELETE去删除一种资源,同样目前不是所有浏览器都支持。
现在我们可以根据四种HTTP RESTful语义去形成如下框架:
require(APPPATH".libraries/REST_Controller.php");
class Example_api extends REST_Controller {
function user_get()
{
// 获得一个用户的信息
}
function user_put()
{
// 创建一个新用户
}
function user_post()
{
//更新用户信息
}
function user_delete()
{
//删除用户信息
}
}
接下来我们充分利用CodeIgniter框架自身的REST_Controller的优势,完善为如下代码:
php
require(APPPATH".libraries/REST_Controller.php");
class Example_api extends REST_Controller {
function user_get()
{
$data = array("returned: ". $this->get("id"));
$this->response($data);
}
function user_post()
{
$data = array("returned: ". $this->post("id"));
$this->response($data);
}
function user_put()
{
$data = array("returned: ". $this->put("id"));
$this->response($data;
}
function user_delete()
{
$data = array("returned: ". $this->delete("id"));
$this->response($data);
}
}
以上代码中包含了如下几个片段,下面逐一讲解:
$this->get() 其中,使用这个从形如index.php/example_api/user?id=1或者如index.php/example_api/user /id/1的连接中获得资源,比如这里就获得其id的值,然后在数组中返回该id对应的数值。
$this->post() 其实是CodeIgniter中调用了其框架的$this->input->post()方法,进行提交操作,并且利用了XSS保护特性。
$this->put() 取curl中提交的或者HTTP协议头的PUT参数的内容。
$this->delete() 取curl中提交的或者HTTP协议头的delete参数的内容。
$this->response() 个方法中,主要是将处理的数据返回给浏览器,你可以指定一个HTTP状态码去表示该次返回结果的状态,比如在数据库中找不到某个记录,可以使用如$this->response(array("error" => "User not found.")去返回结果。
步骤4 与现有应用整合
在下载的示例程序中,我们刚才讲解了重要的部分,接下来讲解如何将下载程序中的关键类与现有的应用整合。下载的应用中,结构如下图: