美文网首页程序员
CI框架与RESTful风格设计架构V1.0

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

作者: 喂喂叫David | 来源:发表于2017-05-08 22:43 被阅读597次

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

        本文链接:https://www.haomeiwen.com/subject/ghsvtxtx.html