Orion for Laravel

LaravelでREST APIを作成する最もシンプルな方法

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"
}

次に、ルートを登録します

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        |

OpenAPI仕様書の生成

OpenAPI仕様書を自動生成するには、コマンドを1つ実行するだけです。

Terminal
php artisan orion:specs