Добавить в корзинуПозвонить
Найти в Дзене

В Pull Request #58379 для ветки 12.x было добавлено полезное улучшение в HTTP-клиент Laravel

Раньше метод $response->json() просто парсил JSON с настройками PHP по умолчанию. Это могло приводить к скрытым проблемам: Тихие ошибки: json_decode() по умолчанию молча возвращает NULL при ошибке в структуре JSON, что усложняет отладку. Потеря данных: PHP может некорректно обрабатывать очень большие числа (например, transaction_id или Snowflake ID из Discord/X), что ведёт к повреждению данных. В метод json() добавлен параметр flags. Это позволяет передавать стандартные константы PHP для управления парсингом. Большие целые числа будут возвращены как строки, что гарантирует их сохранность. При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL. И данные целы, и ошибки не пройдут незамеченными. Раньше для такого контроля нужно было вручную парсить $response->body(). Теперь всё решается одним параметром встроенного метода. Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API. #Laravel #Laravel12
Оглавление

В чём суть

Раньше метод $response->json() просто парсил JSON с настройками PHP по умолчанию. Это могло приводить к скрытым проблемам:

Тихие ошибки: json_decode() по умолчанию молча возвращает NULL при ошибке в структуре JSON, что усложняет отладку.

Потеря данных: PHP может некорректно обрабатывать очень большие числа (например, transaction_id или Snowflake ID из Discord/X), что ведёт к повреждению данных.

Как теперь можно решить

В метод json() добавлен параметр flags. Это позволяет передавать стандартные константы PHP для управления парсингом.

Сценарии использования

Защита от потери больших чисел (часто встречается в платежных системах и соц. сетях):

-2

Большие целые числа будут возвращены как строки, что гарантирует их сохранность.

Строгий режим для отладки:

-3

При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL.

Комбинированный режим для продакшена:

-4

И данные целы, и ошибки не пройдут незамеченными.

Что изменилось для разработчика

Раньше для такого контроля нужно было вручную парсить $response->body(). Теперь всё решается одним параметром встроенного метода.

Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API.

#Laravel #Laravel12