You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有PHP CodeIgniter 2.1.3项目快速创建REST API端点?

快速为CodeIgniter 2.1.3项目创建API端点的方案

1. 在现有项目中新增独立API控制器

不用重构现有代码,直接在application/controllers下创建API专属控制器,专注返回JSON数据:

<?php
class Api extends CI_Controller {
    public function __construct() {
        parent::__construct();
        // 关闭CI的调试信息,避免干扰JSON输出
        $this->output->enable_profiler(FALSE);
        // 允许跨域请求(如果前端部署在不同域名)
        header("Access-Control-Allow-Origin: *");
        header("Content-Type: application/json; charset=UTF-8");
        // 直接复用现有业务模型,避免重复逻辑
        $this->load->model('User_model');
    }

    // 示例:获取全部用户列表
    public function users() {
        $users = $this->User_model->get_all_users();
        echo json_encode(['status' => 'success', 'data' => $users]);
    }

    // 示例:获取单个用户详情
    public function user($id) {
        $user = $this->User_model->get_user_by_id($id);
        if ($user) {
            echo json_encode(['status' => 'success', 'data' => $user]);
        } else {
            http_response_code(404);
            echo json_encode(['status' => 'error', 'message' => '用户不存在']);
        }
    }
}

2. 配置API路由

在application/config/routes.php中添加API路由规则,让请求能正确映射到控制器方法:

$route['api/users'] = 'api/users';
$route['api/user/(:num)'] = 'api/user/$1';

之后就可以通过http://你的域名/api/users这类地址访问API了。

3. 处理不同请求类型与参数

针对POST/PUT/DELETE等操作,在控制器方法里判断请求类型,确保接口符合REST规范:

// 示例:创建新用户
public function create_user() {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        http_response_code(405);
        echo json_encode(['status' => 'error', 'message' => '不允许的请求方法']);
        return;
    }
    // 用CI自带方法获取POST参数
    $user_data = [
        'name' => $this->input->post('name'),
        'email' => $this->input->post('email')
    ];
    $user_id = $this->User_model->insert_user($user_data);
    if ($user_id) {
        http_response_code(201);
        echo json_encode(['status' => 'success', 'user_id' => $user_id]);
    } else {
        http_response_code(500);
        echo json_encode(['status' => 'error', 'message' => '创建用户失败']);
    }
}

对应的路由:

$route['api/user/create'] = 'api/create_user';

4. 复用现有业务逻辑,减少重复工作

直接加载项目中已有的Model类,避免重新编写数据操作代码。如果现有Model中存在和视图耦合的代码(比如输出HTML片段),可以抽离出纯数据操作的方法,或者新建一个基础Model封装通用CRUD逻辑,保证新旧逻辑一致。

5. 过渡到前后端分离的实操建议

  • 先把核心业务模块封装成API,用新前端框架(Vue/React等)调用这些接口,逐步替换旧页面,避免一次性重构的风险。
  • 待API稳定后,可以考虑将API层从CI2中剥离,迁移到更现代的框架(比如CodeIgniter 4、Laravel等),但在此之前保证现有业务正常运行。
  • 务必添加基础安全验证:比如在API控制器的构造方法中检查请求头里的API密钥,防止非法访问:
public function __construct() {
    parent::__construct();
    $api_key = $this->input->get_request_header('X-API-Key');
    if ($api_key !== '你的专属密钥') {
        http_response_code(401);
        echo json_encode(['status' => 'error', 'message' => '未授权访问']);
        exit;
    }
    // 其他初始化操作...
}

内容的提问来源于stack exchange,提问作者Abu Shoeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:31:28