Terminal
composer require tailflow/laravel-orion
간단하지만 강력합니다
익숙한 Laravel의 간결함 그대로, Eloquent 모델과 연관관계를 위한 완전한 기능의 REST API를 제공합니다.
사용하고 배우기 쉽습니다
요청 클래스, 정책, 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 리소스 전체를 코드 한 줄로 등록하는 방법을 제공합니다.
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 트레이트 사용을 고려할 수 있습니다. 정책이 등록되지 않았거나 잘못된 경우 발생하는 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