Pull to refresh

Нужна ли замена JSON? По следам статьи про KTV

Development for iOS *Development of mobile applications *
Я, в целом, планировал публикацию про KTV для ссылки из других статей, чтобы, когда я их опубликую (например, вот эта, про S2) — можно было сослаться и не было бы вопросов, что такое KTV, и откуда оно возникло. Но тема оказалась больная. Поэтому я решил, что нужно немного подробнее рассказать, откуда возникла такая, странная на первый взгляд, идея.

Прикладываю к статье опросы. Помогите мне, пожалуйста, разобраться, в ситуации. :-)

Первая причина — Ångström Style System


Когда я делал ÅSS, нужен был формат данных для записи стилей. Я выбрал JSON. По большому количеству причин, главная из которых — очевидность. Формат хорошо и быстро (я сравнивал) парсится, плюс он крайне простой. Это значит, что я могу в те самые строки (у меня их две на пропертю, имя и значение) — запихнуть что угодно и потом это как угодно проинтерпретировать. С одной стороны это удобно, с другой — хрупкость этой системы совершенно неадекватна. Особенно, когда мы работаем со строго типизированным языком вроде Swift'а.

Мне также хотелось, чтобы проперти таки были пропертями, а не просто строками (массивами, ассоциативными массивами), то есть, чтобы их имена — были идентификаторами, а не чем-то-странным-с-пробелами. Это позволит в недалёком будущем, например, написать плагин для AppCode или для Sublime, которые будут проверять корректность их написания и подсвечивать, если что-то не так. Возможно будет автодополнение для @-ссылок, и так далее.

Также мне не хватало нескольких типов. Цвет — самый простой и самый нужный для стайлера, поэтому я с него начал и в KTV для S2. Но в KTV появятся и другие «нативные» типы.

Вторая причина — API


Работая в аутсорсинге, приходится постоянно реализовывать в мобильном приложении разные API. Степень «изобретательности» людей, которые его пишут порой не поддается никакой оценке, это фантастически странные конструкции. И главная причина таких конструкций — JSON. Он позволяет делать что угодно, как угодно. Умные люди стараются ограничить этот полёт мысли, получаются отличные проекты вроде http://jsonapi.org, но мне кажется, что до тех пор, пока форматом остаётся JSON — никуда ничего не сдвинется. Не зря ведь появились Kotlin, Swift, где даже null/nil просто так не присвоить, на это спецтип нужен.

Возьмём, к примеру, получение фида постов, скажем, блога про машинки. Там список постов с лайками, откуда есть ссылки на пользователей, их машины. У одного пользователя может быть 10 постов и 20 лайков. Стоит ли дублировать каждый раз пользователя в посте/лайке (и не только в посте, есть ведь пользователи, залайкавшие посты, или откомментировавшие)? Нет, точно не стоит. Мы это решали при помощи ID и плоские списки объектов, которые при парсинге вставляются, куда нужно. Но, как мне кажется, удобнее эту функциональность внести в формат. Тогда не придется каждый раз изобретать велосипед, будет очевидный способ реализации этой возможности.

Нужен ли новый формат вообще?


Статья показала, что, безусловно, нужно решение всех этих проблем. Поляризация мнений, отсутствие единого направления при решении этой общей проблемы, «а мне и так хорошо» — всё это напоминает мне споры XML vs JSON. Ни в коем случае не хочу сказать, что KTV — это штука, которая станет «следующим JSON'ом», но что-то нужно с этим сделать, чтобы каждый серверный и каждый клиентский разработчик (отмечу, клиенты — это не только веб, но ещё и мобильные приложения и другие сервера) перестал изобретать что-то своё. Слишком много сил тратится на взаимодействие и на изобретение.

При этом я считаю путь, выбранный ребятами на http://jsonapi.org, неправильным в долгосрочной перспективе. Сам по себе он отличный. Я не верю лишь, что удастся заставить следовать этим рекомендациям всё сообщество. Мы ведь такое уже проходили, это XML-RPC, это SOAP. Всё это — попытка зажать свободный формат рамками соглашений. Как показал опыт — не зажимается (точнее зажимается, но исключительно в рамках ентерпрайза). Только новый, жёсткий формат, который используется повсеместно, сможет заставить разработчиков синхронизироваться и формировать API одинаково. Хотя бы простые.

Поможет ли в этом направлении KTV — не знаю. Ему пара месяцев от роду, маленький ещё, глупый. Сможет вырасти в полноценный формат, будет отлично. Нет, тоже отлично, надеюсь, на его обломках появится другой, более качественный претендент.
Only registered users can participate in poll. Log in, please.
Какой формат вы используете для конфигурационных файлов
24.96% XML 159
61.7% JSON 393
21.66% INI 138
11.3% properties 72
23.23% YAML 148
10.52% Свой собственный 67
637 users voted. 131 users abstained.
Only registered users can participate in poll. Log in, please.
Какой формат вы используете для передачи данных между компонентами приложения
62.69% JSON (свой) 378
35.82% JSON (стандарт вроде jsonapi) 216
10.28% XML (свой) 62
10.61% XML (XML-RPC, SOAP) 64
13.1% Стандартный бинарный формат (ProtoBuf etc.) 79
9.78% Свой бинарный формат 59
3.15% Другой стандарт текстовой передачи (YAML, etc.) 19
4.98% Свой собственный текстовый формат 30
603 users voted. 143 users abstained.
Only registered users can participate in poll. Log in, please.
Нравится ли вам выбранное решение
79.28% Нравится, ничего менять не хочу 394
4.43% Не нравится, но не могу поменять, я не влияю на выбор решения 22
2.62% Не нравится, и я знаю, какой стандартный формат меня устроит 13
13.68% Не нравится, и я не видел формата, который бы меня устроил 68
497 users voted. 160 users abstained.
Tags:
Hubs:
Total votes 20: ↑13 and ↓7 +6
Views 12K
Comments Comments 30