概述
公司接口代码使用的是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测试接口是否成功实现,这里我只展示一个删除信息。
操作前:
操作后:
接口返回数据: