sdv / laravel-endpoint
Laravel Endpoint 是一款为 Laravel 设计的 CRUD REST API 包。
v5.8.0
2020-10-09 13:06 UTC
Requires
- php: >=7.1
- illuminate/database: ~5.8.0|^6.0|^7.0|^8.0
- illuminate/support: ~5.8.0|^6.0|^7.0|^8.0
- spatie/laravel-fractal: 5.6.1
Requires (Dev)
- mockery/mockery: ^1.0.0
- orchestra/testbench: ~3.8.0|^4.0|^5.0|^6.0
- phpunit/phpunit: ^7.0
This package is not auto-updated.
Last update: 2024-09-21 08:36:54 UTC
README
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 许可证许可。