Завжди відображайте API-виключення у форматі JSON в Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 24 жовтня, 2024
Вам цікаво дізнатися, як легко зробити так, щоб API завжди повертав JSON-формат для виключень у Laravel 11 без використання додаткового middleware? Читайте далі, щоб дізнатися про простий та ефективний спосіб налаштування обробки помилок у ваших API-маршрутах!

Чи коли-небудь ви реалізовували повернення 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.

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