Как стать автором
Обновить

Комментарии 19

Проблемы какие-то надуманные, никогда с подобным не сталкивался, кто будет объект строкой делать? А вот когда все делают через POST и оборачивают в {success: true, data: any} — уже более приземленные.

Просто это фактически rpc, но обернуто в rest. Достаточно распространенная практика, не вижу в ней ничего предосудительного. Чистый rest вообще достаточно сложно на глобус натягивается.

Вы счастливчик, что ни с чем подобным не сталкивались) А я сталкивался не один раз, отсюда и возникло желание написать статью. Если интересно, могу написать, откуда ноги растут у каждой из проблем.
кто будет объект строкой делать?

Корни проблемы тут: в БД хранится json-объект в виде строки (что, конечно, тоже довольно спорное решение, сделанное скорее наспех), далее объект считывается и в сыром виде передаётся в ответе… Скорее это вопрос лени разработчика.
Часто это из-за потребности в NOSQL хранилище в SQL решении.
Учитывая, что многие современные СУБД хорошо работают и с таким данными( json или xml ), вполне нормальная практика.
Но если таких данных в системе становится много, нужно просто переходить на NOSQL или поднимать рядом еще NOSQL хранилище.
Таким образом достаточно удобно делать данные произвольно структуры. Или дополнительные данные в линковочных таблицах.
Обычно это не приводит к проблемам, если по этим данным не выполняется фильтрация или поиск.
Про NOSQL согласен.
Но ещё json в SQL-таблицах порой возникает даже когда структура данных полностью известна, но присутствует лень создавать подчинённую таблицу… В любом случае, адекватная сериализация обязана присутствовать, объект, обёрнутый в строку — это жуть)

Тут критерий скорее не "становится много", а "SQL хранилище перестаёт справляться".

НЛО прилетело и опубликовало эту надпись здесь

Сам так однажды сделал и даже не догадывался об этом. Так как значения брал из mysql и не мог представить даже что числовые поля mysql драйвер PHP превращает в строковые.

Может быть дело было в том, что тогда BigInteger в JavaScript/JSON не подвезли? Если его передать без экранирования в строку, то значимые биты теряются, но при этом никакой ошибки не выдается. Просто получаем битые данные.
Натыкался на такое поведение и тоже приходилось экранировать в строку на удивление потребителям данного API.

Вот кстати да, нередкая проблема. Столкнулся с подобным, когда получал id'шники из API Discord'a

Классная дурь! Выдыхай уже ;-)
Вот к чему 123 тут задавать числом, зачем подобная путаница? Пусть будет строкой, десериализатор разберётся

Microsoft не в курсе, что это вредно: Приложения ASP.NET Core поддерживают десериализацию заключенных в кавычки чисел

Насколько мне известно, ранее они были сильно против этого, но поскольку Newtonsoft.JSON позволяет подобные фокусы, Microsoft, видимо, сдались, чтобы перевести как можно больше людей на свою библиотеку.
НЛО прилетело и опубликовало эту надпись здесь
Могу еще одну «рекомендацию» дать.
Используете имена параметров с заглавной буквы в yaml файле описания.
И пусть те кто используют java реализации json мучаются.
{
«data»: "[56, 61, 73, 79, 61, 20, 20, 20, 20, 20, 31, 32, 33, 20, 20, 34, 35, 36, 20, 20, 50, 69, 74, 65, 72, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]"
}

Помню таким образом ещё студентами первого курса выводили данные в файл на самых первых лабах… вот было время… а сейчас напридумывали ваших джсонов и сериализаторов и жить сразу легче стало ^_^
В копилку гениальных решений, у нас на проекте было gateway api, так вот, там была реализована гениальная презентация данных — ассоциативный массив разделялся на два списка — ключи и значения, строчки, которые не нужны удалялись из обоих списков, а если в ответе надо ключ отдать в другом виде, ключ этот перезаписывался по индексу в списке, после всех этих манипуляций создавался новый ассоциативный массив и рендерился клиенту :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории