Кастомізація відповіді ресурсів у API на базі Laravel

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Вам цікаво, як оптимізувати API-відповіді у Laravel? Метод withResponse дозволяє налаштовувати не лише дані, а й заголовки та коди статусу, щоб ваш API мав професійний вигляд і міг ефективно передавати метадані. Читайте далі, щоб дізнатися, як це реалізувати

Метод withResponse у Laravel дозволяє розробникам налаштовувати API-відповіді, змінюючи HTTP-об'єкт відповіді перед його відправленням клієнту. Це вміння виходить за межі простих перетворень даних і дає можливість налаштувати заголовки, коди статусу та інші атрибути відповіді.

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

class UserResource extends JsonResource
{
    public function withResponse($request, $response)
    {
        $response->header('X-Resource-Type', 'User');
    }
}

Ось приклад реалізації комплексної API-відповіді:

<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Request;
 
class DocumentResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->when(
                $request->user()->canViewContent($this->resource),
                $this->content
            ),
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at
        ];
    }
 
    public function withResponse(Request $request, $response)
    {
        // Встановлюємо заголовки специфічні для ресурсу
        $response->header('X-Document-ID', $this->id);
 
        // Додаємо інформацію про кешування для публічних документів
        if ($this->is_public) {
            $response->header('Cache-Control', 'public, max-age=3600');
            $response->header('ETag', md5($this->updated_at));
        }
 
        // Встановлюємо відповідні коди статусу
        if ($this->wasRecentlyCreated) {
            $response->setStatusCode(201);
        }
 
        // Додаємо попередження про застарілі поля за запитом
        if ($request->has('include_legacy')) {
            $response->header('X-Deprecated-Fields', 'legacy_format,old_structure');
            $response->header('X-Deprecation-Date', '2024-07-01');
        }
    }
}

Метод withResponse трансформує ваші API-ресурси з простих контейнерів даних у повністю налаштовані HTTP-відповіді, які передають важливі метадані разом з основним вмістом

Популярні

Logomark Logotype

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці

Logomark Logotype

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

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

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу