Метод 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-відповіді, які передають важливі метадані разом з основним вмістом