当前位置:网站首页>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测试接口是否成功实现,这里我只展示一个删除信息。
操作前:

操作后:

接口返回数据:

边栏推荐
- Convertible bond concept table x notation gives you a convenient and fast experience!
- leetcode day5 删除重复的电子邮箱
- [notes] Apocalypse: list of practical experience and reflection of product managers
- 英语文章翻译-英语文章翻译软件-免费批量翻译
- andorid系统layout、values、drawable适配
- WPF 实现带蒙版的 MessageBox 消息提示框
- How does app automated testing achieve H5 testing
- Sword finger offer II 109. unlock the password lock
- 英文翻译西班牙语-批量英文翻译西班牙工具免费
- SaltStack配置管理
猜你喜欢

Rust 入门指南(rustup, cargo)

宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0

Rust 入门指南(modules 和工程结构)

Android-第十三节03xUtils-数据库框架(增删改查)详解

How does app automated testing achieve H5 testing

架构基本概念和架构本质

NDK series (5): from introduction to practice, JNI explodes the liver and explains everything in detail!

Using Baidu easydl to realize chef hat recognition of bright kitchen and stove

How openocd directly downloads programs to STM32 board through stlink (solved)

Saltstack system initialization
随机推荐
SaltStack之数据系统
Doxygen document generation tool
When CNN meets transformer cmt:revolutionary neural networks meet vision transformers
C language cycle sentence strengthening exercises
博途1200/1500PLC上升沿下降沿指令编程应用技巧(bool数组)
【笔记】《启示录》:产品经理的实践经验与反省清单
Investment of 3.545 billion yuan! Gree Group participates in Xiaomi industry fund
How does app automated testing achieve H5 testing
Pytoch: implementation of crossentropyloss and labelsmoothing
What parameters should be passed in calling integer or character array functions
After reading the thesis for three years, I learned to read the abstract today
[notes] Networking: Internet product managers change the world
Rust 入门指南(rustup, cargo)
STC12C5A60S2 function description (STC12C5A60S2 is triggered by default)
串口接收应用——环形缓冲buffer
2022年全国最新消防设施操作员(中级消防设施操作员)题库及答案
The peak rate exceeds 2gbps! Qualcomm first passed 5g millimeter wave MIMO OTA test in China
MySQL性能测试工具sysbench学习
How does app automated testing achieve H5 testing
可转债概念表 x Notion 给你方便快捷的体验!