cloudmonitor/apiflow

该包已被废弃,不再维护。未建议替代包。

简化您的RESTful API。

v1.1.41 2023-02-14 17:05 UTC

README

快速开发RESTful API端点,具有丰富的功能,如关键字查询、分页等。

安装

composer require cloudmonitor/apiflow

准备控制器

类似于Eloquent中的特殊属性,如$fillables,APIFlow允许自定义数组定义的属性。这样,您可以通过API控制数据如何被暴露。

方法

目前APIFlow旨在用于RESTful资源列表,无论是index还是集合和单个条目show。可以通过具体引用API资源和Eloquent模型来完成。

class UserController extends APIController
{
  public function index()
  {
    return parent::api(\App\Http\Resources\User::class, \App\Models\User::class)->many();
  }
}

或者,如果名称遵循上述标准约定,即App\Http\Controllers\UserController, \App\Http\Resources\User和 \App\Models\User

class UserController extends APIController
{
  public function index()
  {
    return parent::api()->many();
  }
}

同样,您可以显示单个记录。

class UserController extends APIController
{
  public function show($id)
  {
    return parent::api()->one($id);
  }
}

可用的快捷方式还包括

  • ->getIndex()
  • ->getShow($id)

应用额外查询

apply()可以用来应用额外的过滤器,例如ID小于10。

class UserController extends APIController
{
  public function index()
  {
    return parent::api()
      ->apply(function(Builder $q) {
        return $q->where('id', '<', 10);
      })
      ->many();
  }
}

属性

目前支持3个属性

/**
 * Search query database columns.
 * 
 * @var array
 */
protected $queryColumns = ['name', 'email', 'auid'];

/**
 * Model scopes exposed to the API.
 * 
 * @var array
 */
protected $scopes = ['departments'];

/**
 * Related models API can include.
 * 
 * @var array
 */
protected $withRelations = ['department'];

第一个属性(queryColumns)告诉APIFlow数据库中它可以进行全文搜索的列。每个列都会进行部分搜索,意味着文本可以围绕搜索字符串(%string%)。字符串也将被转换为小写,以避免大小写敏感。

第二个属性(scopes)允许APIFlow对模型的作用域执行查询(public function scopeDepartment())。作用域应仅需要两个参数,默认的Builder和查询字符串参数。第二个参数将始终转换为给定的格式。例如

GET /api/users?departments=1,2

作用域是

public function scopeDepartments(Builder $query, array $departments): void

将转换为数组[1,2]

可用功能

目前APIFlow的功能包括

  • 关键字搜索(如上所述,用于定义列): query= (仅适用于many/getIndex)
  • 排除ID,如果您想防止查询在列表中已显示的内容:exclude= (仅适用于many/getIndex)
  • 设置输出结果的限制,上限为25:limit= (仅适用于many/getIndex)
  • 加载与模型相关的数据。用逗号分隔:with=
  • 在模型上运行自定义作用域:scopename=
  • 仅某些ID(分页将不起作用):only=
  • 按列和方向排序:orderBy=id|asc,name|desc,email

示例

/api/users?query=John&exclude=4&limit=10&with=department,team&departments=1,3&orderBy=name