CI框架与RESTful风格设计架构V1.0

什么是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

你可能感兴趣的:(CI框架与RESTful风格设计架构V1.0)