Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Date() означает дату и имеет своим единственным аргументом дату в таком-то формате.Странный велосипед, грозит быдлокодерством
Если приложение большое, то скорее всего есть модели на клиенте, никто не мешает сделать так new Person(jsonData) и внутри уже в черном ящике приводим данные к нужному виду, зачем усложнять общение с сервером?!
Ведь эти данные мы не сможем использовать нигде больше — в них логика! Т.е. Public api такрй делать нельзя
Date('1991-01-01') не больше логики, чем в <date>1991-01-01</date> – нотации вызова можно считать своего рода тэгами, данные остаются данными. То, что парсер трактует Date() как вызов некой функции – всего лишь деталь реализации, позволяющая сделать парсер простым и расширяемым.Насчет черного ящика – верно, но для поддержки любых типов данных за пределами набора, предоставляемого JSON, придется либо держать схему с явно прописанными типами полейэто даже полезно. с JSON Schema уже во всю лисапедят то, что раньше делали с DTD и XML Schema. github.com/google/autoparse, github.com/cwacek/python-jsonschema-objects и т.п., — вплоть до билдеров форм на бутстрапе.
{
foo: 1
}
{
"foo": 1
}
ike@shair:/tmp> od -tc 000
0000000 { \n \t " a a a " : 1 1 1 \n } \n
0000020
ike@shair:/tmp> js-yaml 000
aaa: 111
ike@shair:/tmp>
>> JS-YAML: deficient indentation at line 9, column 1:
>> foo: 1
>> ^
>> JS-YAML: deficient indentation at line 10, column 1:
>> }
>> ^
Output
ERROR:
while scanning for the next token
found character '\t' that cannot start any token
in "<unicode string>", line 2, column 1:
"foo": 1
^
Такой велосипед на первый взгляд требует уйму времени на поддержку (баго фикс, въезжание новых разработчиков в особенности фреймворка).
Зачем нужны batch-запросы? В самом элементарном случае мы можем сделать RESTful api для каждого из запросов, параллельность выполнения чанков можем гарантировать на стороне клиента.
Что за юз кейс для выполнения на клиенте произвольного кода? Почему бы не использовать некий eval валидного js-кода на стороне сервера хотя бы?
Я правильно понимаю, что схемы нет в проекте? Ну то есть если мы отправляем объект типа Person в одном запросе на сервер может прийти поле с именем dateOfBirth, а во втором birthDate? Если есть, то почему мы железно должны указывать тип данных например Date, а не определять его по схеме?
Зачем писать Всеобъемлющий Супер Фреймворк, если можно решить каждый вопрос в отдельности, даже если писать все 'вручную' (те же отдельные вызовы апи)?
Ваш клиентский код будет генерить сотни-сотни вызовов апи в секунду? зачем заморачиваться об ограничениях браузера?
Почему бы не добавить этот самый запрос вытаскивания друзей друзей? Это очень просто и очень явно.
Я не могу понять, а что плохого в том, что придется во время валидации интерпретировать данные согласно схеме? Давайте назовем этот процесс конвертацией из json в js-объект модели.
И даже при этом фреймворке ваши разработчики будут писать количество кода сравнимое с первым вариантом, но во втором варианте у Вас будет в системе присутствовать очень сложная система этого фреймворка.
Вы извините, конечно. Но я вижу астронавта от архитектуры.
{"whatToDo": "doWhatIMean"}
Как только в формате данных появляется контекст, брюки превращаются из формата обмена в сигнальный протокол.Этот самый контекст находится далеко снаружи формата и является исключительно деталью реализации.
Нет никакой нужды для этого расширять JSON, просто оговорите ваш протокол до предела:У автора есть система кодирования, которая превращает его JSONEX в валидный JSON, в котором все именно так и оговорено.
{"whatToDo": "doWhatIMean"}
JSON родился из яваскрипта, и жертвование совместимостью с форматом сериализации объекта должно быть чем-то хорошо оправданоПредлагаемый автором JSONEX точно так же полностью совместим с яваскриптом, из которого он родился.
jsonex – упрощаем сложные клиент-серверные диалоги