sdv/laravel-endpoint

Laravel Endpoint 是一款为 Laravel 设计的 CRUD REST API 包。

v5.8.0 2020-10-09 13:06 UTC

README

Latest Stable Version License Total Downloads Build Status

Laravel Endpoint 是一款为 Laravel 设计的 CRUD REST API 包。

功能

  • REST CRUD 端点脚手架
  • 使用 laravel-fractal 标准化 JSON 响应
  • 简单的过滤操作
  • 自定义 fractal 序列化器
  • 自定义过滤和排序策略
  • Elasticsearch / Algolia 搜索
  • API 文档(《Swagger》,《API Blueprint》)

安装

您可以通过 composer 引入此包。

$ composer require sdv/laravel-endpoint

注册服务提供者。

// config/app.php
'providers' => [
    ...
    SdV\Endpoint\EndpointServiceProvider::class,
]

替换 app/Exceptions/Handler.php 中的 render 方法。

use SdV\Endpoint\ProvidesExceptionsHandler;

class Handler extends ExceptionHandler
{
    use ProvidesExceptionsHandler;

    ...

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($this->isRequestForApi($request)) {
            return $this->renderJson($exception, $request);
        }

        return parent::render($request, $exception);
    }

    ...
}

测试

composer test

命令使用

创建新端点

php artisan endpoint:make:all Post v1

这将创建所有这些文件。

  • app/Post.php
  • app/Repositories/PostRepository.php
  • app/Transformers/PostTransformer.php
  • app/Http/Controllers/Api/V1/PostController.php

选项

  • --mongo : 生成与 Laravel-MongoDB 兼容的模型。(您需要在您的应用程序中安装 https://github.com/jenssegers/laravel-mongodb
  • --module=Modules\Search : 在 App\Modules\Search 命名空间下生成所有文件。
    - app
        - Modules
            - Search
                - Http\Controllers\Api\V1
                - Models
                - Repositories
                - Transformers
    - bootstrap
    - config
    - database
    - ...

然后,您需要注册您的 API 路由。

// routes/api.php
Route::group(['namespace' => 'Api\V1', 'prefix' => 'v1'], function () {
    Route::resource('posts', 'PostController', ['except' => [
        'create', 'edit'
    ]]);
});

创建新的模型类。

php artisan endpoint:make:model Post

这将创建 app/Post.php 文件,并插入最小模板和可过滤特性。

可选地,您可以添加 --mongo 标志以生成与 Laravel-MongoDB 兼容的模型。

创建新的控制器类。

php artisan endpoint:make:controller Post v1

这将创建 app/Http/Controllers/Api/V1/PostController.php 文件并插入最小模板。

创建新的仓库类。

php artisan endpoint:make:repository Post

这将创建 app/Repositories/PostRepository.php 文件并插入最小模板。

创建新的转换器类。

php artisan endpoint:make:transformer Post

这将创建 app/Transformers/PostTransformer.php 文件并插入最小模板。

API 使用

分页

更改所选页面

/api/v1/topics?page=2

更改每页项目数

/api/v1/topics?per_page=50

返回所有

/api/v1/topics?limit=all

过滤

默认应用 and 过滤器。

并且过滤

/api/v1/topics?filter[]=name,eq,laravel&filter[]=name,eq,eloquent&satisfy=all

或者过滤

/api/v1/topics?filter[]=name,eq,laravel&filter[]=name,eq,eloquent&satisfy=any

排序

/api/v1/topics?sort=name
/api/v1/topics?sort=-name
/api/v1/topics?sort=-slug,name

包含

更新您的转换器以添加您的包含规则,请根据 fractal 文档(http://fractal.thephpleague.com/transformers/)进行操作

然后您可以在调用中包含相关模型

/api/v1/topics?include=posts,posts.author

错误响应

  • 无效请求(400) $this->badRequest('请求不可接受。')
  • 未授权(401) $this->unauthorized('未提供有效的 API 密钥。')
  • 禁止(403) $this->forbidden('访问被禁止。')
  • 未找到(404) $this->notFound('资源未找到。')
  • 方法不允许(405) $this->methodNotAllowed('不支持的 HTTP 方法。')
  • 无法处理实体(422) $this->unprocessableEntity('无效字段。')
  • 请求过多(429) $this->tooManyRequests('请求过多,请稍后再试。')
  • 服务器错误(500) $this->serverError('内部服务器错误。')

注意:`ProvidesExceptionsHandler` 默认支持以下异常

  • Illuminate\Database\Eloquent\ModelNotFoundException
  • Illuminate\Validation\ValidationException
  • Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
  • Symfony\Component\HttpKernel\Exception\NotFoundHttpException

鸣谢

许可证

Laravel 终端是开源软件,受MIT 许可证许可。