Laravel OpenAPI CLI генерує Artisan-команди з вашої OpenAPI-специфікації

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 24 лютого, 2026
Spatie випустила Laravel OpenAPI CLI — пакет, що автоматично генерує Artisan-команди з OpenAPI-специфікацій для кожного ендпоінта з типізованими опціями та підтримкою відправки даних. Хочете дізнатися, як викликати API з терміналу, працювати з параметрами й налаштовувати кеш та обробку помилок?

Spatie випустила Laravel OpenAPI CLI — пакет, який перетворює специфікації OpenAPI на окремі Artisan-команди для Laravel. Кожен API endpoint у вашій специфікації отримує власну команду з типізованими опціями для path і query-параметрів та для тіл запитів.

# Як це працює

Після встановлення зареєструйте URL специфікації OpenAPI через фасад OpenApiCli — зазвичай у AppServiceProvider:

namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
use Spatie\OpenApiCli\Facades\OpenApiCli;
 
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        OpenApiCli::register('https://api.acme.com/openapi.yaml', 'acme')
            ->baseUrl('https://api.acme.com')
            ->bearer(env('ACME_API_TOKEN'));
    }
}

Якщо специфікація визначає GET /orders, POST /orders і DELETE /orders/{order_id}, пакет згенерує такі Artisan-команди:

Команда acme:list відображає всі доступні endpoints і їхні описи.

Команди мають формат {prefix}:{http-method}-{path}, де prefix — ім'я, вказане при реєстрації (2-й параметр методу register), а шлях перетворюється в kebab-case з видаленими path-параметрами. Тому GET /orders/{order_id}/items стане acme:get-orders-items. Якщо у специфікації задані operation IDs, можна використовувати їх за допомогою ->useOperationIds().

# Запуск команд

Будь-яку згенеровану команду можна викликати прямо в терміналі:

php artisan acme:get-orders --limit=10

За замовчуванням відповіді виводяться у вигляді читабельних таблиць. Щоб отримати YAML, додайте прапорець --yaml:

php artisan acme:get-orders --limit=10 --yaml

# Path і query-параметри

Path-параметри — обов'язкові опції, query-параметри — необов'язкові. Обидва типи конвертуються в kebab-case — тож order_id і orderId обидва стають --order-id:

# Path parameter
php artisan acme:get-orders-items --order-id=42
 
# Multiple path parameters
php artisan acme:delete-customers-orders --customer-id=1 --order-id=7
 
# Query parameters
php artisan acme:get-orders --status=pending --limit=10

Нотація з дужками в query-параметрах також спрощується в kebab-case, тому filter[status] стає --filter-status.

# Надсилання даних

Для endpoint-ів, що приймають тіло запиту, можна передавати поля окремо за допомогою --field:

php artisan acme:post-orders --field customer_id=1 --field status="pending"

Поля за замовчуванням відправляються як JSON, якщо лише в специфікації не вказано application/x-www-form-urlencoded. Щоб передати сирий JSON, використовуйте --input:

php artisan acme:post-orders --input '{"customer_id":1,"shipping":{"address":"123 Main St","city":"New York"}}'

Зауважте, що --field і --input не можна комбінувати. Для завантаження файлів префіксуйте значення поля символом @:

php artisan acme:post-orders-attachments --order-id=67 --field file=@/path/to/invoice.pdf

Якщо будь-яке поле містить файл, запит надсилається як multipart/form-data.

# Параметри конфігурації

API реєстрації також підтримує кілька опцій через fluent-інтерфейс:

OpenApiCli::register('https://api.acme.com/openapi.yaml', 'acme')
    ->baseUrl('https://api.acme.com')
    ->bearer(env('ACME_API_TOKEN'))
    ->banner('Acme Orders API v2')
    ->cache(ttl: 600)
    ->followRedirects()
    ->yamlOutput()
    ->showHtmlBody()
    ->useOperationIds()
    ->onError(function (Response $response, Command $command) {
        return match ($response->status()) {
            429 => $command->warn('Rate limited...'),
            default => false,
        };
    });

Кілька ключових опцій:

# Встановлення

Встановіть через Composer:

composer require spatie/laravel-openapi-cli

Пакет також добре інтегрується з Laravel Zero — фреймворком для створення автономних CLI-застосунків.

Повна документація доступна на Spatie's docs site, а вихідний код можна переглянути на GitHub.

Популярні

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Випущено Livewire 3.6

Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!