cakemanager / cakephp-api
Requires
- php: >=5.4
- admad/cakephp-jwt-auth: dev-master
- cakemanager/cakephp-utils: dev-master
- cakephp/cakephp: ~3.0
Requires (Dev)
Suggests
- cakemanager/cakephp-settings: Easy way to manage your settings via your database.
This package is auto-updated.
Last update: 2022-02-01 12:46:19 UTC
README
警告:此插件已过时。
此插件允许您轻松地动态创建灵活的 RESTful API。
注意:目前这是一个非稳定的 CakePHP 3.0 插件。它目前正在开发中,应被视为实验性。我们正在努力进行第一次发布!
目录
安装
您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。
安装 composer 包的推荐方式是
composer require cakemanager/cakephp-api:dev-master
现在您需要使用以下命令加载插件
$ bin/cake plugin load -b -r Api
默认情况下,插件配置可以使用 Configure::write()
完成。Api 插件具有 Settings 插件 集成。通过在加载 Api 插件之前添加 Configure::write('Api.settings')
,设置将被保存到您的数据库中,并在 CakeAdmin 插件(或您自己的集成)中进行配置。
用法
响应结构
Api 插件处理以下响应结构
{
"url": "/api/blogs/1.json",
"code": 200,
"data": {
"id": 1,
"title": "My first blog",
"body": "How are you?",
"category_id": 1,
"created_by": {
"id": 1,
"email": "bob@cakemanager.org"
},
"modified_by": {
"id": 1,
"email": "bob@cakemanager.com"
},
"created": "2015-06-27T08:39:02+0000",
"modified": "2015-07-03T20:13:09+0000"
}
}
说明
url
- 这是请求的 URL。code
- 这是状态码。在失败时(4xx
(客户端)或5xx
(服务器端))将给出错误。data
- 请求的数据。
注意:在未来的版本中,您将能够添加自己的结构。目前这将是基线。
基本介绍
假设我们想要为我们的博客创建一个 API。首先,我们需要一个以 Api
前缀的控制器。使用 shell 创建它
$ bin/cake bake controller --prefix Api Blogs
现在,BlogsController
已创建在 src/Controller/Api/BlogsController.php
中。删除所有 CRUD 操作,以便我们有一个空控制器。
现在添加以下内容,让我们的 API 执行工作
use Api\Controller\ApiControllerTrait;
class BlogsController extends AppController
{
use ApiControllerTrait;
public function initialize()
{
parent::initialize();
$this->loadComponent('Api.ApiBuilder', []);
}
}
说明
- 添加
use ApiControllerTrait
来调用请求的动作以模拟它。当您请求动作view
,而它不在您的控制器中时,此特性能够看到这一点,并使用我们的组件。 Api.ApiBuilder
组件处理所有的 API 事务。此组件还用于添加配置。
现在将以下内容添加到您的 config/routes.php
Router::prefix('api', function ($routes) {
$routes->extensions(['json']);
$routes->resources('Blogs');
});
这将把BlogsController
添加到Cake的rest-full路由中。更多内容,请阅读https://book.cakephp.com.cn/3.0/en/development/routing.html#creating-restful-routes。
从现在开始,您的api正在工作,但是等等,还没有配置任何操作!让我们添加一些CRUD操作
$this->loadComponent('Api.ApiBuilder', [
'actions' => [
'index',
'view',
'add',
'edit',
'delete',
]
]);
现在所有CRUD操作都将添加到您的API中。
启用和禁用
以下示例可用于启用或禁用操作
// enable single action
$this->ApiBuilder->enable('index');
// enable multiple actions
$this->ApiBuilder->enable(['index', 'view']);
// disable single action
$this->ApiBuilder->disable('index');
// disable multiple actions
$this->ApiBuilder->disable(['index', 'view']);
添加父资源
在某些情况下,您有父资源,例如
/api/blogs/:blog_id/comments
/api/blogs/:blog_id/comments/:id
参考:https://book.cakephp.com.cn/3.0/en/development/routing.html#creating-nested-resource-routes
Api插件为此类父资源提供了集成。通过调用index
操作,查询将自动在(在这种情况下)blog_id
上验证。在保存查询时,列将自动添加。为此,请在您的控制器中使用以下代码
// in the comments-controller
$this->ApiBuilder->addParentResource('Blogs', 'blog_id');
第一个值是父资源的名称:Blogs
。第二个值是表中的列名,也是请求中的变量名(参见上面的第一个代码示例)。在这种情况下:blog_id
。
自定义操作
当然,您将能够自定义自己的操作。看看这个例子
public function view($id) {
$this->set('data', $this->Blogs->get($id));
return $this->ApiBuilder->execute('view');
}
这个例子展示了您将如何影响响应的data
键,并让ApiBuilder完成其工作。
自定义操作
添加您的自定义操作很简单
public function active() {
$this->set('data', $this->Blogs->find()->where(['Blogs.active' => true]));
return $this->ApiBuilder->execute();
}
使用此操作将在api.org/api/blogs/active.json
返回所有活动的博客。
配置
ApiBuilderComponent
具有以下配置
modelName
- 控制器使用的模型名称。_serialize
- 序列化变量列表。序列化变量将添加到json响应中。actions
- 实现的操作。也可以通过enable
和disable
方法进行更改。
bootstrap.php
包含以下配置
Api.settings
- 如果应该使用设置插件来存储配置,则为布尔值。通过添加此功能,设置可以在CakeAdmin面板中管理。Api.JWT
- 如果API中应实现JWT,则为布尔值。JWT通过JwtAuth插件实现。
保持联系
如果您需要帮助或对此插件有任何想法,请随时在Gitter聊天。
拉取请求始终非常欢迎!