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" }
<?php namespace App\Http\Controllers\Api; use App\Models\Post; use Orion\Http\Controllers\RelationController; class PostTagsController extends RelationController { /** * 模型的完全限定类名 */ protected $model = Post::class; // 或 "App\Models\Post" /** * 在 Post 模型上定义的关联名称 */ protected $relation = 'tags'; }
然后,注册路由
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 |
+———————————+———————————————————————————————————————+————————————————————————————————————————+——————————————————————————————————————————————————————————————+————————————+ | Method | URI | Name | Action | Middleware | +———————————+———————————————————————————————————————+————————————————————————————————————————+——————————————————————————————————————————————————————————————+————————————+ | GET|HEAD | api/posts/{post}/tags | api.posts.relation.tags.index | App\Http\Controllers\Api\PostTagsController@index | api | | POST | api/posts/{post}/tags/search | api.posts.relation.tags.search | App\Http\Controllers\Api\PostTagsController@index | api | | POST | api/posts/{post}/tags | api.posts.relation.tags.store | App\Http\Controllers\Api\PostTagsController@store | api | | GET|HEAD | api/posts/{post}/tags/{tag} | api.posts.relation.tags.show | App\Http\Controllers\Api\PostTagsController@show | api | | PUT|PATCH | api/posts/{post}/tags/{tag} | api.posts.relation.tags.update | App\Http\Controllers\Api\PostTagsController@update | api | | DELETE | api/posts/{post}/tags/{tag} | api.posts.relation.tags.destroy | App\Http\Controllers\Api\PostTagsController@destroy | api | | POST | api/posts/{post}/tags/batch | api.posts.relation.tags.batchStore | App\Http\Controllers\Api\PostTagsController@batchStore | api | | PATCH | api/posts/{post}/tags/batch | api.posts.relation.tags.batchUpdate | App\Http\Controllers\Api\PostTagsController@batchUpdate | api | | DELETE | api/posts/{post}/tags/batch | api.posts.relation.tags.batchDestroy | App\Http\Controllers\Api\PostTagsController@batchDestroy | api | | POST | api/posts/{post}/tags/attach | api.posts.relation.tags.attach | App\Http\Controllers\Api\PostTagsController@attach | api | | DELETE | api/posts/{post}/tags/detach | api.posts.relation.tags.detach | App\Http\Controllers\Api\PostTagsController@detach | api | | PATCH | api/posts/{post}/tags/sync | api.posts.relation.tags.sync | App\Http\Controllers\Api\PostTagsController@sync | api | | PATCH | api/posts/{post}/tags/toggle | api.posts.relation.tags.toggle | App\Http\Controllers\Api\PostTagsController@toggle | api | | PATCH | api/posts/{post}/tags/{tag}/pivot | api.posts.relation.tags.pivot | App\Http\Controllers\Api\PostTagsController@updatePivot | api |
生成 OpenAPI 规范
只需运行一条命令,即可自动生成 OpenAPI 规范。
Terminal
php artisan orion:specs