什么是restful?自行google或百度
在工作中难免会碰到很多指令不够明确(体悟领导的意图,猜客户的心里...)的行为,在技术领域中这种行为往往是「致命」的。也许不会造成程序的崩溃,但是进行白盒测试、代码二次阅读、重构等行为时,往往会耗费一些「不必要」的工时。写的时间长了,这些体会便更深刻了。
在前两年APP正火爆的时候,用ThinkPHP框架层设计过一个接口框架(代码在CSDN上,写的烂就不给传送门了),后来想review一直各种事情耽搁着!但机会总是等来的嘛,现在公司的产品已经「受精」,经4周左右的开发周期,近些日子才基本收工。
RESTful 风格工程(以下简写工程来特指RESTful 风格设计)与人体很相似,当大脑进行指令分配时,个体的每个情感、行为都进行相应的响应。那工程中的每个公开入口则是进行指令分配的区域,由使用方(如前端AJAX调用)进行对话式的数据请求。
关键代码示例
//后台部分
public function index(){
switch (REQUEST_METHOD) {
case REQUEST_GET : //GET请求,获取数据列指令
$message_id = $this->uri->segment(2,0);
if($message_id) //表示获取单项
$this->message_item($message_id);
else //获取所有列
$this->assessment_list();
break;
case REQUEST_POST: //POST请求,新增数据指令
$this->message_add();
break;
case REQUEST_DELETE ://DELETE,删除某数据指令
$message_id = $this->uri->segment(2, 0);//这是CI框架的获取/contorller/action/params风格的URL参数的写法
$this->message_delete($message_id);
break;
case REQUEST_PUT ://PUT,更新某数据指令
$message_id = $this->uri->segment(2, 0);
$this->message_update($message_id);
break;
}
}
//前端JS
function kkd_data_init(url){
url = (url)?url:'/message';
$.ajax({
url: url,
dataType:'json',
type:'get',
beforeSend:function(){},//AJAX请求前处理,可以做验证,请求锁防重执行等
success: load_success,//这是正确执行的函数
error:kkd_ajax_error //这是我封装的公共错误方法
});
}
我们可以看到,当前端对www.host.com/message进行get请求时,工程通过判断请求方式后进入message_list(),message_list是一个私有方法,与message相关业务请求都是由index这个公开暴漏的入口进行处理。然后由各个私有方法进行具体的业务,最后进行json返回(包括请求状态,响应文本,响应具体数据)。
{
code:'状态码', //如200表示正确执行,300表示执行错误
info: '打印信息',
data:'返回数据'
}
我们可以将前端的请求体稍微修改一下,将get方式修改为delete或者put,url为wwww.host.com/message/100001。工程接受到的指令则是对ID为100001的message数据进行delete(删除)或put(更新)操作。
这个message的处理业务就是和message相关的业务,当然,可以根据自身实际的业务去扩展暴漏第二个入口(如check)。只是在暴漏出去之后,要在routes里进行路由配置。
$route['message/check/:num'] = 'message/check'
前端调用
get / post请求,www.host.com/message/message/check
put / delete请求,www.host.com/message/message/check/100001
需要注意的是如果是put和delete请求,在CI框架中要用$this->input->input_stream()获取参数,get()和post()是获取不到的。
接口安全,身份验证
接口安全有很多方式,目前采取的只是简单的token验证方式。
$.ajaxSetup({
headers: {
'TOKEN': $.cookie('token')
}
});
我们将toke字串发送到客户端cookie里,在ajax请求时,在headers里加入token交给后端进行token验证。
RESTful 只是一种风格。你以前爱帆布,现在爱皮鞋。
设计文献参考阅读
RESTful API编写指南
HTTP状态码
跟着Github 学习RESTful
** 关于2.0 **
我也不知道2.0要成啥样,噗哈哈哈....未来谁知道呢,有新的所得,肯定会继续写着。
生命不息,代码不停 — — 来自喂喂 17.05.08
网友评论