Laravel 12.44: добавлены HTTP-клиентские callbacks после получения ответа

Laravel традиционно делает упор на удобство разработчиков, и релиз 12.44 продолжает эту тенденцию. В этой версии команда Laravel представила несколько полезных улучшений, ориентированных на более чистую и выразительную работу с HTTP-взаимодействиями, тестами и валидацией.

Вызов функций после получения HTTP-ответа

Одно из ключевых нововведений это метод afterResponse() для HTTP-клиента. Он позволяет регистрировать обратные вызовы, которые выполняются после того, как HTTP-ответ получен и сформирован.

Раньше обработку ответа обычно делали прямо после вызова: проверяли заголовки, логировали статусы, отправляли события или трансформировали данные. Теперь такую логику можно вынести непосредственно в цепочку вызовов HTTP-клиента, что делает код чище и переиспользуемым.

Пример использования

return Http::acceptJson()
    ->withHeader('X-Shopify-Access-Token', $shopCreds->token)
    ->baseUrl("https://{$shopCreds->shop_domain}.myshopify.com/admin/api/2025-10/")
    ->afterResponse(function (Response $response) {
        logger()->info('Ответ получен', [
            'status' => $response->status(),
        ]);
    })
    ->get('products.json');

В этом примере логирование статуса ответа происходит после того, как ответ полностью сформирован.

Реальный кейс: уведомления об устаревших API

Очень полезный сценарий, когда нужно мониторить заголовки, которые предупреждают о том, что API устарело:

return Http::acceptJson()
    ->withHeader('X-Shopify-Access-Token', $shopCreds->token)
    ->baseUrl("https://…")
    ->afterResponse(function (Response $response) use ($shopCreds) {
        $header = $response->header('X-Shopify-API-Deprecated-Reason');
        if ($header) {
            event(new ShopifyDeprecationNotice(
                $shopCreds->shop,
                $header
            ));
        }
    })
    ->get('orders.json');

Такой код отслеживает предупреждения об устаревании API и отправляет соответствующее событие.

Преобразование ответа в собственные классы

Метод afterResponse() можно использовать не только для логирования или событий, но и для мутатизации ответа. Например, обернуть его в пользовательский объект или DTO:

->afterResponse(fn (Response $response) =>
    new ShopifyResponse($response->toPsrResponse())
)

Это помогает отделить HTTP-слой от бизнес-логики и централизовать работу с ответами.

Новые методы для тестов

В Laravel 12.44 также появились улучшенные методы для ассертов заголовков в тестах. Теперь можно писать более выразительные проверки:

$response->assertHeader('X-RateLimit-Remaining');

$response->assertHeader('Content-Type', 'application/json');

Такие проверки делают тесты более понятными и дают более точные сообщения об ошибках.

Расширенные методы валидации дат

Система валидации в Laravel стала ещё выразительнее за счёт новых нативных методов для проверки дат. Это упрощает правила валидации, особенно когда дело касается сложных условий.

Пример использования:

use Illuminate\Validation\Rules\Date;

$request->validate([
    'start_date' => [
        'required',
        Date::parseable()->beforeOrEqual('today'),
    ],
]);

Такой код легче читать и меньше шансов ошибиться при формулировке правил.

Основные преимущества релиза:

  • afterResponse() даёт гибкий способ обработать HTTP-ответы;

  • улучшенные методы ассертов делают тесты более выразительными;

  • новые helpers для валидации упрощают проверку дат.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Настройка SSH аутентификации на Linux

Подробное руководство по настройке аутентификации по SSH-ключам на Linux-сервере. В статье разобраны генерация ключей, копирование на сервер, проверка подключения и отключение входа по паролю с примерами консольных команд.

13 0 1 мин

PHP Generators

Статья рассказывает о PHP генераторах - что это, как они работают, зачем нужны и как использовать их в реальных проектах. Примеры включают чтение больших CSV и потоковую обработку данных.

42 0 2 мин