Динамічний контроль відповіді API в ресурсах Laravel

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

API Resources в Laravel надають елегантні способи умовного включення атрибутів у ваші відповіді, що дозволяє створювати гнучкі та ефективні API, які адаптуються до різних контекстів і дозволів

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

Серед основних доступних методів:

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->when($request->user()->isAdmin(), $this->email),
        ];
    }
}

Розглянемо практичний приклад API для каталогу продуктів з умовними даними:

<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
 
class ProductResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'slug' => $this->slug,
            'price' => $this->price,
 
            // Включати повний опис лише в детальному перегляді
            'description' => $this->when(
                $request->route()->named('products.show'),
                $this->description,
                $this->excerpt
            ),
 
            // Включати інформацію про товар на складі для автентифікованих користувачів
            'stock_level' => $this->when(
                $request->user()?->can('view-inventory'),
                $this->stock_count
            ),
 
            // Включати зв'язки, коли вони завантажені
            'category' => new CategoryResource($this->whenLoaded('category')),
 
            // Умовно включати кількість відгуків
            'reviews_count' => $this->when(
                $request->include_counts,
                $this->reviews_count
            ),
 
            // Включати дані для адміністраторів
            'profit_margin' => $this->when(
                $request->user()?->isAdmin(),
                fn() => $this->calculateProfitMargin()
            ),
        ];
    }
}

Умовні атрибути Laravel в API Resources дозволяють створювати контекстно-залежні відповіді, зберігаючи ваш код чистим і зручним для підтримки