Terminal
composer require tailflow/laravel-orion
シンプルかつ強力
Eloquentモデルとリレーションを、慣れ親しんだLaravelのシンプルさそのままに、フル機能のREST APIとして提供します。
使いやすく学びやすい
Requestクラス、ポリシー、APIリソースといったLaravelの標準機能を活用します。
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リソース全体を1行のコードで登録できます。
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で公開するモデルに対応するポリシーが用意されていることを確認してください。
また、ローカルでのテストでは、ポリシーが登録されていない、または正しくない場合に403エラーになるのを避けるため、
DisableAuthorizationトレイトの使用を検討できます。+-----------+------------------------------+-----------------------------+------------------------------------------------------------+------------+ | 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仕様書を自動生成するには、コマンドを1つ実行するだけです。
Terminal
php artisan orion:specs