CodeIgnier框架实现restful API接口编程

概述

公司接口代码使用的是CodeIgnier框架,故我使用CodeIgnier框架实现一个简单的restful风格接口。

CodeIgnier框架默认没有资源路由,只有在路由中使用HTTP动词如下图:

在这里插入图片描述

在实现restful风格接口编程时需要自己定义路由的参数以及类型具体代码如下:

路由routes.php代码
//默认控制器
$route['default_controller'] = 'welcome';
//错误页面
$route['404_override'] = '';
//这个选项可以自动的将 URL 中的控制器和方法中的连字符('-')转换为下划线('_')
$route['translate_uri_dashes'] = FALSE;
/*
 * restful接口编程
 */
//页面展示 get请求
$route['api']['get'] = 'api/index';
//展示一条数据 get请求
$route['api/(:num)']['GET'] = 'api/view/$1';
//新增一条数据 post请求
$route['api']['POST'] = 'api/add';
//修改一条数据 post请求
$route['api/(:num)']['POST'] = 'api/edit/$1';
//修改数据页面展示 put请求
$route['api/(:num)']['PUT'] = 'api/edit/$1';
//删除一条数据 delete请求
$route['api/(:num)']['DELETE'] = 'api/delete/$1';

这里我觉得每次编写都需要编写这么多路由不方便,故我编写了一个函数来生成这些路由,只需要调用一次即可,代码如下:

/*
 * restful接口编程
 * params route array 路由数组
 * params name string restful路由名
 */
function restful(&$route,$name){
    //页面展示 get请求
    $route[$name]['get'] = $name.'/index';
    //展示一条数据 get请求
    $route[$name.'/(:num)']['GET'] = $name.'/view/$1';
    //新增一条数据 post请求
    $route[$name]['POST'] = $name.'/add';
    //修改一条数据 post请求
    $route[$name.'/(:num)']['POST'] = $name.'/edit/$1';
    //修改数据页面展示 put请求
    $route[$name.'/(:num)']['PUT'] = $name.'/edit/$1';
    //删除一条数据 delete请求
    $route[$name.'/(:num)']['DELETE'] = $name.'/delete/$1';
}

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
//调用函数生成restful路由
restful($route,'api');

下面我编写了一个例子来实现一个简单的增、删、改、查

控制器Api代码:
<?php
/**
 * Created by PhpStorm.
 * User: wyq
 * Date: 2021/8/3
 * Time: 16:00
 */

class Api extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        //加载模型
        $this->load->model('admins_model');
        //加载助手函数也就是公共函数
        $this->load->helper('common_helper');
    }
    /*
     * 获取全部数据 get请求
     */
    public function index(){
       $data =  $this->admins_model->findAll();
        //公共函数中的方法
       success($data);
    }
    /*
     * 获取单个数据 get请求
     */
    public function view($id){
        $data = $this->admins_model->findOne($id);
        success($data);
    }
    /*
     * 新增一条数据
     */
    public function add(){
        $data = $_POST;
        $data = $this->admins_model->add($data);
        if ($data){
            success($data);
        }else{
            //公共函数中的方法
            fail($data);
        }
    }
    /*
     * 修改一条数据
     */
    public function edit($id){
        if ($_POST){
            //修改页面逻辑
            $data = $_POST;
            $data['id'] = $id;
            $res = $this->admins_model->dell($data);
            if ($res){
                success($res);
            }else{
                fail($res);
            }
        }else{
            //修改页面战术PUT请求
            $data = $this->admins_model->findOne($id);
            success($data);
        }
    }
    /*
     * 删除一条数据
     */
    public function delete($id){
       $res = $this->admins_model->del($id);
       success($res);
    }
}
助手函数(公共函数)common_helper.php代码:
<?php
/**
 * Created by PhpStorm.
 * User: wyq
 * Date: 2021/8/3
 * Time: 17:02
 */


/*
 * 密码加密函数
 */
function encrypt($data)
{
    $salt = "123123asdasdasd";
    $psw = md5($salt . md5($data));
    return $psw;
}

/*
 * 通用响应
 * @params int code 响应码
 * @params string $msg 响应描述
 * @params string $data 响应数据
 */
function response($code = 200 , $msg="success" , $data=array()){
    $res = array('code'=>$code,'msg'=>$msg,'data'=>$data);
    echo json_encode($res);die;
}

/*
 * 成功响应
 * @params string $msg 响应描述
 * @params string $data 响应数据
 */
function success($data=array(),$msg="success",$code = 200){
    response($code,$msg,$data);
}

/*
 * 失败响应
 * @params string $msg 响应描述
 * @params string $data 响应数据
 */
function fail($code = 500 ,$msg="fail"){
    response($code,$msg);
}
模型Admins_model代码:
<?php
/**
 * Created by PhpStorm.
 * User: wyq
 * Date: 2021/7/16
 * Time: 10:26
 */

class Admins_model extends CI_Model
{
    public function __construct()
    {
    	parent::__construct();
        //加载数据库
        $this->load->database();
    }


    /*
     * 获取全部数据
     */
    public function findAll()
    {
        $query = $this->db->get('admins');
        return $query->result_array();
    }

    /*
     * 获取一条数据
     */
    public function findOne($id)
    {
        $this->db->where('id', $id);
        $this->db->select('*');
        $query = $this->db->get('admins');
        return $query->result();
    }

    /*
     * 新增一条数据
     */
    public function add($data){
        $res = $this->db->insert('admins',$data);
        return $res;
    }

    /*
     * 修改一条数据
     */
    public function dell($data){
        $this->db->where('id',$data['id']);
        return $this->db->update("admins",$data);
    }
    /*
     * 删除一条数据
     */
    public function del($id){
        $this->db->where('id',$id);
        return  $this->db->delete('admins');
    }
}

这里就实现了一个最基本的restful接口路由,以及控制器模型的实现,这里我使用postman测试接口是否成功实现,这里我只展示一个删除信息。

操作前:

在这里插入图片描述

操作后:

在这里插入图片描述

接口返回数据:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值