cakemanager/cakephp-api

此包已被废弃,不再维护。作者建议使用https://github.com/cakeplugins/api 包。

CakePHP 3.x 的 API 插件

安装: 394

依赖: 0

建议者: 0

安全: 0

星标: 9

关注者: 5

分支: 8

开放问题: 0

类型:cakephp-plugin

dev-master 2016-05-25 10:23 UTC

This package is auto-updated.

Last update: 2022-02-01 12:46:19 UTC


README

警告:此插件已过时。

请使用 https://github.com/cakeplugins/api 代替。

此插件允许您轻松地动态创建灵活的 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 - 实现的操作。也可以通过enabledisable方法进行更改。

bootstrap.php包含以下配置

  • Api.settings - 如果应该使用设置插件来存储配置,则为布尔值。通过添加此功能,设置可以在CakeAdmin面板中管理。
  • Api.JWT - 如果API中应实现JWT,则为布尔值。JWT通过JwtAuth插件实现。

保持联系

如果您需要帮助或对此插件有任何想法,请随时在Gitter聊天。

拉取请求始终非常欢迎!