Чи коли-небудь ви реалізовували повернення JSON у відповідь на запити API за допомогою кастомного проміжного програмного забезпечення, подібного до наведеного нижче?
class ForceJsonResponse
{
public function handle(Request $request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
Laravel 11 надає зручний спосіб зробити це без додаткового проміжного програмного забезпечення. Це особливо корисно, якщо ви тестуєте API маршрути у веб-браузері та завжди отримуєте JSON, навіть без налаштування заголовка Accept
на application/json
чи використання наведеного вище коду:
// bootstrap/app.php
return Application::configure(basePath: dirname(__DIR__))
//...
->withExceptions(function (Exceptions $exceptions) {
$exceptions->shouldRenderJsonWhen(function (Request $request, Throwable $e) {
if ($request->is('api/*')) {
return true;
}
return $request->expectsJson();
});
})->create();
Метод shouldRenderJsonWhen()
гарантує, що будь-які виключення, що виникають під час запиту API, будуть відображені у форматі JSON. Окрім виключень, вам потрібно стежити, щоб звичайні відповіді також повертали JSON.
Ця порада походить із документації, яка також містить корисні поради щодо обробки виключень, налаштування відповідей на помилки та багато іншого!