Orion for Laravel

使用 Laravel 创建 REST API 的最简单方式

Terminal
composer require tailflow/laravel-orion
简单而强大
为你的 Eloquent 模型和关联提供功能完备的 REST API,同时保持你所热爱的 Laravel 的简洁。
易于使用与学习
使用标准的 Laravel 特性,例如请求类、策略和 API 资源。
SDK 与 OpenAPI 规范
TypeScript SDK 与 OpenAPI 规范开箱即用。

首先,定义控制器

之后,你可以在控制器上设置操作钩子、可过滤和可搜索的属性、可包含的关联等。

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{
    /**
    * 模型的完全限定类名
    */
    protected $model = Post::class; // 或 "App\Models\Post"
}

然后,注册路由

Orion 提供了一种只需一行代码即可注册整个模型或关联 API 资源的方式。

api.php
<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;
use App\Http\Controllers\PostTagsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class)->withSoftDeletes();
    Orion::morphToManyResource('posts', 'tags', PostTagsController::class);
});

最后,享受功能完备的 REST API

你现在可以通过标准化的 API 管理文章及其标签了。

请确保你为通过 API 暴露的模型定义了策略。
另外,在本地测试时,你可以考虑使用 DisableAuthorization trait,以避免在策略未注册或不正确时出现 403 错误。
+-----------+------------------------------+-----------------------------+------------------------------------------------------------+------------+
| Method    | URI                          | Name                        | Action                                                     | Middleware |
+-----------+------------------------------+-----------------------------+------------------------------------------------------------+------------+
| GET|HEAD  | api/posts                    | api.posts.index             | App\Http\Controllers\Api\PostsController@index             | api        |
| POST      | api/posts/search             | api.posts.search            | App\Http\Controllers\Api\PostsController@index             | api        |
| POST      | api/posts                    | api.posts.store             | App\Http\Controllers\Api\PostsController@store             | api        |
| GET|HEAD  | api/posts/{post}             | api.posts.show              | App\Http\Controllers\Api\PostsController@show              | api        |
| PUT|PATCH | api/posts/{post}             | api.posts.update            | App\Http\Controllers\Api\PostsController@update            | api        |
| DELETE    | api/posts/{post}             | api.posts.destroy           | App\Http\Controllers\Api\PostsController@destroy           | api        |
| POST      | api/posts/{post}/restore     | api.posts.restore           | App\Http\Controllers\Api\PostsController@restore           | api        |
| POST      | api/posts/batch              | api.posts.batchStore        | App\Http\Controllers\Api\PostsController@batchStore        | api        |
| PATCH     | api/posts/batch              | api.posts.batchUpdate       | App\Http\Controllers\Api\PostsController@batchUpdate       | api        |
| DELETE    | api/posts/batch              | api.posts.batchDestroy      | App\Http\Controllers\Api\PostsController@batchDestroy      | api        |
| POST      | api/posts/batch/restore      | api.posts.batchRestore      | App\Http\Controllers\Api\PostsController@batchRestore      | api        |

生成 OpenAPI 规范

只需运行一条命令,即可自动生成 OpenAPI 规范。

Terminal
php artisan orion:specs