Автоматизована документація API для ресурсів Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 19 грудня, 2024
API-ресурси є незамінним інструментом для розробників Laravel, надаючи можливість ефективно підготувати моделі для відповіді API. Дізнайтеся, як автоматичне генерування документації з Scramble робить цей процес ще простішим і точнішим

API ресурси є чудовим інструментом для створення API в Laravel. Вони забезпечують рівень трансформації для моделей і JSON, який повертається API. Ви можете налаштувати, як ваші моделі представлені у вигляді масивів, а API ресурси пропонують багато інструментів для більш детальної трансформації.

Scramble — це автоматичний генератор документації для Laravel, який створює документацію API без необхідності використовувати PHPDoc анотації та має вбудовану підтримку API ресурсів: scramble.dedoc.co.

У новій версії Scramble тепер підтримує всі методи побудови даних для API ресурсів, що робить автоматично згенеровану документацію ще більш точною.

# Використання API ресурсів

Припустимо, ми хочемо повернути модель користувача через API. Ми можемо створити наступний API ресурс:

<?php
namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

У контролері ми повертаємо екземпляр ресурсу, передаючи модель користувача в його конструктор:

public function show(User $user)
{
    return new UserResource($user);
}

Хоча ресурси можуть виглядати простими, вони насправді дуже всеосяжні. Є багато корисних методів для формування представлення моделі у API: деякі дозволяють об'єднувати дані в результатуючий масив (наприклад, merge, mergeWhen), інші, такі як whenLoaded, дозволяють включати відношення лише тоді, коли воно завантажене — це допомагає уникнути проблеми N+1.

# Автоматична документація Scramble

Scramble — це генератор документації OpenAPI (Swagger) для Laravel. Він автоматично створює документацію API для вашого проекту без потреби вручну писати PHPDoc анотації.

Це забезпечує актуальність вашої документації, що дозволяє покладатися на неї з упевненістю.

Встановити Scramble можна через composer:

composer require dedoc/scramble

Після установки Scramble ви можете переглянути документацію для нашого прикладу ендпоінта (передбачається, що він знаходиться за адресою /api/user/{user} і ви не змінили налаштування за замовчуванням):

Без жодних анотацій Scramble вже документує тип відповіді.

Тепер давайте покращимо API ресурс, додавши нові можливості. Наприклад, ми можемо захотіти відображати атрибут email лише тоді, коли автентифікований користувач є адміністратором.

    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
-           'email' => $this->email,
+           $this->mergeWhen($request->user()->is_admin, [
+               /** @format email */
+               'email' => $this->email,
+           ]),
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }

Тепер Scramble документує ресурс таким чином, що правильно вказує, що атрибут email може бути відсутнім у відповіді (зверніть увагу, що email більше не позначається як обов'язковий):

Широкий вибір методів, таких як when, доступні через трейті ConditionallyLoadsAttributes, який використовується в JsonResource. У новій версії Scramble тепер підтримує всі ці методи.

Наприклад, метод attributes дозволяє об'єднати кілька атрибутів моделі в результатуючий масив:

    public function toArray(Request $request): array
    {
        return [
-           'id' => $this->id,
-           'name' => $this->name,
+           $this->attributes(['id', 'name']),
            $this->mergeWhen($request->user()->is_admin, [
                /** @format email */
                'email' => $this->email,
            ]),
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }

# Колекції API ресурсів

Ви також можете повертати колекції API ресурсів з вашого API. Наприклад, коли повертаєте список користувачів, ви можете реалізувати це так:

public function index()
{
    return UserResource::collection(User::all());
}

# Документування колекцій ресурсів

Scramble підтримує анонімні та іменовані колекції з коробки.

Ось згенерована документація для наведеного вище прикладу:

Якщо ви додасте додаткові дані до колекції, Scramble автоматично задокументує це:

public function index()
{
    return UserResource::collection($users = User::all())->additional([
        /** Загальна кількість користувачів */
        'count' => (int) $users->count(),
    ]);
}

Ось результуюча документація:

# Модифікація відповіді ресурсу

Ще одна чудова функція API ресурсів — це можливість змінювати відповідь, яка повертається з API ендпоінта. Це реалізується через модифікацію об'єкта відповіді в методі withResponse в API ресурсі:

public function withResponse(Request $request, JsonResponse $response)
{
    $response->setStatusCode(201);
}

# Задокументований модифікований ресурс

Scramble підтримує документацію для withResponse без додаткових анотацій. Приклад з вище буде задокументовано наступним чином:

Зверніть увагу, що статус відповіді 201, як зазначено в статусі withResponse.


API ресурси є безцінним інструментом для розробників на Laravel. Вони дозволяють готувати моделі для API-відповідей з використанням потужного рівня трансформації.

Scramble подбає про автоматичне оновлення вашої документації API, добре розуміючи API ресурси без необхідності писати PHPDoc анотації.

Якщо ви ще не використовуєте Scramble, спробуйте його: https://scramble.dedoc.co

Ось демонстраційна документація від Scramble: https://scramble.dedoc.co/demo/scramble