当前位置:网站首页>CodeIgnier框架实现restful API接口编程
CodeIgnier框架实现restful API接口编程
2022-07-28 17:47:00 【wyqgg123】
概述
公司接口代码使用的是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测试接口是否成功实现,这里我只展示一个删除信息。
操作前:

操作后:

接口返回数据:

边栏推荐
- New this prototype precompiled exercise
- Test Development Notes
- NPM installing and uninstalling global packages
- 德国、葡萄牙均宣布不会禁用华为5G设备,但德国会设定严格限制条件!
- 开盘暴涨215%!国产信号链芯片企业芯海科技登陆科创板
- 使用SaltStack自动化部署LNMP
- 英文翻译西班牙语-批量英文翻译西班牙工具免费
- STC12C5A60S2 function description (STC12C5A60S2 is triggered by default)
- MySQL8 tmp_table_size和max_heap_table_size
- China's first chip stamp released: built-in 120um ultra-thin NFC chip
猜你喜欢
随机推荐
Nokia expands its 5g agreement with BT and will become its largest wireless access device supplier
JS preventDefault() 键盘输入限制 onmousewheel stopPropagation停止事件传播
测试开发备忘
架构基本概念和架构本质
ES6 conversion of new data type set and arr set map
MySQL performance testing tool sysbench learning
【已解决】AC86U ML改版固件虚拟内存创建失败,提示USB磁盘读写速度不满足要求
BLDC 6-step commutation simulink
App自动化测试是怎么实现H5测试的
WPF implements MessageBox message prompt box with mask
Design of library management database system
企业级分布式爬虫框架入门
Preliminary learning function (3rd blog)
This customized keyboard turns me on~
英文翻译意大利语-批量英文翻译意大利语工具免费
英语文章翻译-英语文章翻译软件-免费批量翻译
MySQL8 tmp_table_size和max_heap_table_size
彻底理解位运算——左移、右移
串口接收应用——环形缓冲buffer
In order to develop high-end photoresist, Jingrui Co., Ltd. invested 75million yuan to purchase SK Hynix ASML lithography machine









