The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз языка программирования PHP 8.0"
Отправлено Ordu, 27-Ноя-20 01:10 
> Простейший пример.
> Прилетают данные в JSON от нескольких источников, которые мне неподконтрольны. Там одни
> и те же поля, но кто-то отдаёт их строками, кто-то числами,
> как попало, и никаких гарантий, что завтра не сделают по-другому, не.

Про схему json никто из вас не слышал, конечно?

У вас вообще вся система выстроена как нетипизированная, и естественно в таком варианте получить бонусы от типизации сложно. Точнее, не то чтоб сложно, но чтобы получить бонусы, надо мыслить типизированно.

Типизируй json. Парси json не в json-объект, а в типизированные структуры, согласно схеме. Тут очень полезно будет найти что-нибудь, что будет генерить декларации типов на основании схемы json, или схему json'а на основании деклараций типов (я не могу порекомендовать что-либо конкретное, посколько не знаю, разве если ты пишешь на rust, но если ты пишешь на нём, ты уже знаешь все нужные инструменты). Это приведёт к тому, что в рантайме проверки типов будут выполняться однократно, в процессе парсинга json'а, весь остальной код сможет легко полагаться на статические типы. Что мало того, что быстрее работает, так и ещё избавляет от целых классов рантайм ошибок, посредством статического анализа сорцов.

Организовав валидацию json'а, посылай всех "неподконтрольных", у кого json не проходит валидацию схемой, далеко и надолго. Если послать -- не вариант, то парся json, обрабатывай ошибки парсинга связанные с типизацией, пробуй сконвертать типы, когда они не соответствуют схеме. Таким образом ты сможешь отделить валидацию входящих данных от их использования, тебе же самому будет лучше, потому как декларация данных отдельно, валидация данных отдельно, а логика работы с данными чиста и незамутнена никакими тайпкастами и эксепшнами типа invalid input.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру