nueip / codeigniter-rest
CodeIgniter 3 RESTful API 资源基础控制器
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-13 20:53:36 UTC
README
CodeIgniter RESTful API
CodeIgniter 3 RESTful API 资源基础控制器
此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']
配置
- 创建一个控制器以扩展
nueip\rest\Controller
,
class Resource extends nueip\rest\Controller {}
- 添加并实现由 构建方法 引用的操作方法。
然后您可以访问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']);