nueip/codeigniter-rest

CodeIgniter 3 RESTful API 资源基础控制器

2.0.0 2020-02-13 06:38 UTC

This package is auto-updated.

Last update: 2024-09-13 20:53:36 UTC


README

CodeIgniter RESTful API


CodeIgniter 3 RESTful API 资源基础控制器

Latest Stable Version License

此RESTful API扩展已收集到 nueip/codeigniter-pack,这是Codeigniter框架的完整解决方案。

特性

  • PSR-7 标准化

  • RESTful API 实现

  • Laravel 资源控制器 模式

概要

演示

class ApiController extends nueip\rest\Controller
{
    public function index()
    {
        return $this->response->json(['bar'=>'foo']);
    }
}

状态 200 OK 输出

{"bar":"foo"}

RESTful 创建回调

public function store($requestData=null) {

    $this->db->insert('mytable', $requestData);
    $id = $this->db->insert_id();
    
    return $this->response->json(['id'=>$id], 201);
}

状态 201 Created 输出

{"id":1}

打包标准格式

try {
    throw new Exception("API forbidden", 403);
} catch (\Exception $e) {
    // Pack data into a standard format
    $data = $this->pack(['bar'=>'foo'], $e->getCode(), $e->getMessage());
    return $this->response->json($data, $e->getCode());
}

状态 403 Forbidden 输出

{"code":403,"message":"API forbidden","data":{"bar":"foo"}}

需求

此库需要以下内容

  • PHP 5.4.0+
  • CodeIgniter 3.0.0+

安装

在Codeigniter项目的 \application 文件夹下运行Composer

composer require nueip/codeigniter-rest

检查Codeigniter application/config/config.php

$config['composer_autoload'] = TRUE;

您可以将供应商路径自定义到 $config['composer_autoload']

配置

  1. 创建一个控制器以扩展 nueip\rest\Controller,
class Resource extends nueip\rest\Controller {}
  1. 添加并实现由 构建方法 引用的操作方法。

然后您可以访问RESTful API

https://yourname.com/resource/api
https://yourname.com/resource/api/123

如果您喜欢,您也可以使用 /ajax 而不是 /api

https://yourname.com/resource/ajax
https://yourname.com/resource/ajax/123

resource 是控制器名称,如果您不想在URI中包含 /api/ajax,则可以设置以下路由设置。

路由设置

如果您希望有一个标准RESTful URI模式,该控制器定义为URI资源,例如

https://yourname.com/resource
https://yourname.com/resource/123

您可以将此控制器的路由添加到 \application\config\routes.php 中以启用RESTful API URL

$route['resource_name'] = '[Controller]/route';
$route['resource_name/(:any)'] = '[Controller]/route/$1';

资源控制器

基本的RESTful API控制器是 nueip\rest\Controller,以下表格是资源控制器处理的操作,其中 action 指的是 CI_Controller 的动作名称,您可以覆盖它

没有路由设置,URI类似于 /photos/api/photos/api/{photo}

构建方法

您可以通过参考 资源控制器模板 创建资源控制器。

以下RESTful控制器方法可以根据您的需求添加。每个方法默认对应资源控制器表中的动作,并注入所需的参数

public function index() {}
protected function store($requestData=null) {}
protected function show($resourceID) {}
protected function update($resourceID=null, $requestData=null) {}
protected function delete($resourceID=null, $requestData=null) {}

$resourceID(字符串)是资源从请求中的地址标识符

$requestData(数组)是从请求原始体解析的数组输入数据,支持常见内容类型的数据格式。(另请参阅 this->request->getRawBody() 以获取原始数据)

自定义路由与方法

默认路由用于映射资源控制器相同动作方法的映射如下

protected $routes = [
    'index' => 'index',
    'store' => 'store',
    'show' => 'show',
    'update' => 'update',
    'delete' => 'delete',
];

您可以在创建资源控制器时覆盖它以定义自己的路由

class ApiController extends nueip\rest\Controller {

    protected $routes = [
        'index' => 'find',
        'store' => 'save',
        'show' => 'display',
        'update' => 'edit',
        'delete' => 'destory',
    ];
}

在重置路由后,每个RESTful方法(键)将进入指定的控制器动作(值)。例如,在访问 /resources/api/ URL并使用 GET 方法时,将进入 find() 动作。然而,默认路由将进入 index() 动作。

键指的是资源控制器表中的动作,您必须定义您需要的所有方法。

行为

资源控制器支持为每个操作设置行为,您可以实现如不同权限的认证。

_setBehavior()

在路由之前设置行为

protected boolean _setBehavior(string $action, callable $function)

示例

class BaseRestController extends \nueip\rest\Controller
{
    function __construct() 
    {
        parent::__construct();
    
        // Load your Auth library for verification
        $this->load->library('Auth');
        $this->auth->verify('read');
        
        // Set each action for own permission verification
        $this->_setBehavior('store', function() {
            $this->auth->verify('create');
        });
        $this->_setBehavior('update', function() {
            $this->auth->verify('update');
        });
        $this->_setBehavior('delete', function() {
            $this->auth->verify('delete');
        });
    }
    // ...

用法

pack()

将数组数据打包成正文格式

您可以根据应用程序标准覆盖此方法。

protected array pack(array|mixed $data, integer $statusCode=200, string $message=null)

示例

$data = $this->pack(['bar'=>'foo'], 403, 'Forbidden');
return $this->response->json($data, 403);

JSON 结果

{
    "code": 403,
    "message": "Forbidden",
    "data": {
        "bar": "foo"
    }
}

HTTP 请求

PSR-7 请求组件 nueip\http\request 已预载入 nueip\rest\Controller,它提供了输入处理程序和 HTTP 认证。您可以在控制器类中通过 $this->request 调用它。

用法

getRawBody()

返回原始 HTTP 请求体

public string getRawBody()

示例

// Request with `application/json` raw
$data = json_decode($this->request->getRawBody);

getAuthCredentialsWithBasic()

使用 HTTP Basic 认证获取凭据

public array getAuthCredentialsWithBasic()

示例

list($username, $password) = $this->request->getAuthCredentialsWithBasic();

getAuthCredentialsWithBearer()

使用 OAuth 2.0 授权框架:Bearer 令牌使用获取凭据

public string getAuthCredentialsWithBearer()

示例

$b64token = $this->request->getAuthCredentialsWithBearer();

HTTP 响应

PSR-7 响应组件 nueip\http\response 已预载入 nueip\rest\Controller,它提供了输出处理程序和格式化程序。您可以在控制器类中通过 $this->response 调用它。

用法

json()

JSON 输出快捷方式

public void json(array|mixed $data, integer $statusCode=null)

示例

$this->response->json(['bar'=>'foo'], 201);

setFormat()

将响应格式设置到 CI_Output

public self setFormat(string $format)

示例

$this->response->setFormat(\nueip\http\Response::FORMAT_JSON);

setData()

将响应数据设置到 CI_Output

public self setData(mixed $data)

示例

$this->response->setData(['foo'=>'bar']);

send()

将响应发送到客户端。

public void send()

示例

$this->response->send();

withAddedHeader()

返回一个带有指定值附加的指定头部的实例。

public self withAddedHeader(string $name, string $value)

示例

return $this->response
    ->withAddedHeader('Access-Control-Allow-Origin', '*')
    ->withAddedHeader('X-Frame-Options', 'deny')
    ->json(['bar'=>'foo']);

参考