lanser / laravel-openapi-generator
Api swagger docs generater with spatia Laravel data
1.6.5
2024-05-06 05:50 UTC
Requires
- php: ^8.1
- laravel/framework: ^10.48
- phpdocumentor/reflection-docblock: ^5.4
- spatie/invade: ^2.0
- spatie/laravel-data: ^4.6
README
Generate OpenAPI specification from Laravel routes and Laravel Data objects
This repository is just fork from original. Thanks to this person.
Original xolvio/laravel-data-openapi-generator
and this package work with spatie/laravel-data
and
phpdocumentor/reflection-docblock
Install
In composer.json
add this repository:
"require": { "lanser/laravel-openapi-generator" : "^1.5" },
and
composer update
Version
Add a app.version
config in app.php
to set the version in the openapi specification:
'version' => env('APP_VERSION', '1.0.0'),
Usage
Config
php artisan vendor:publish --tag=openapi-generator-config
Generate
php artisan openapi:generate
View
Swagger available at APP_URL/api/openapi
On your request
use Lanser\LaravelApiGenerator\Request\RequestData; class UserRequest extends RequestData { public function __construct( public string $name, public string $email ) { } public static function rules(ValidationContext $context): array { return [ 'name' => ['required', 'string'], 'email' => ['required', 'email'], ]; } }
On your resource
use Lanser\LaravelApiGenerator\Response\ResponseData; class UserResponse extends ResponseData { public function __construct( public string $name, public string $email ) { } }
Example
namespace App\Http\Controllers; use App\Http\Requests\UserRequest; use App\Response\UserResponse; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\User; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; class Controller extends BaseController { use AuthorizesRequests, ValidatesRequests; /** * @param UserRequest $request * @return UserResponse */ public function show(UserRequest $request): UserResponse { $user = User::query()->first(); return UserResponse::from($user); } }
Final result
For Rout grouping
Route::group(['as' => 'user'], function () { Route::post('/', [Controller::class, 'show']); });
For add auth
Route::group(['as' => 'user'], function () { Route::post('/', [Controller::class, 'show']); })->middleware('auth:sanctum');
If you want documenting errors you can use Attribute ErrorMessage
use Lanser\LaravelApiGenerator\OpenApi\Attributes\ErrorMessage; #[ErrorMessage(["User not found", "User is not active"])] public function show(UserRequest $request): UserResponse { $user = User::query()->first(); return UserResponse::from($user); }
Click the schema if you want see what kind of exceptions have in this route