gimntut / databoom-talking

Территория обсуждений потенциальных возможностей databoom

Home Page:https://github.com/gimntut/databoom-talking/issues

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

О формате выходных данных

gimntut opened this issue · comments

Для разработки нужен читабельный вид.
Для фронтенда нужна компактная запись без лишних пробелов.
Для бэкапов нужен заархивированый вариант.
Для мобильных устройств нужен json
Для старых корпоративных систем нужен xml.
Кому-то вообще нужен текст или yaml.

Изначально в odata есть параметр filter:
/collections/$allobjects?$format=zip
Мне больше нравится более коротка запись:
/collections/$allobjects.zip
Некоторые качалки берут имя файла из url, а не из заголовков. В первом случае скачается файл "$allobjects", а во втором "$allobjects.zip", хотя их содержимое должно быть эквивалентно.
Нужно рассматривать текст после точки не как формат, а как фильтр, на вход которому данные передаются в одном виде, а выходят в другом. Рассмотрим такую запись:
/collections/$allobjects.pretty.json.zip
/collections/$allobjects формирует компактный json (context.type="json") и передаёт его расширению (extension) которое зарегистрировано для "pretty". Pretty добавляет в context информацию, и передаёт данные в фильтр json, которое проверяет к какому формату относятся данные, если тип json, то данные приводятся человеко-читаемому виду, т.е. добавляются переносы строк и отступы, в соответствии с данными добавленными расширением pretty. Далее данные передаются в фильтр zip. Фильтр не проверяет к какому типу относятся данные, но на выходе меняет Content-Type на application/zip.
Для json, xml, txt важно в каком формате приходят данные, а для pretty, zip, rar, base64 это не имеет значения.

Пример

Переменная До фильтра base64 После фильтра base64
context.text '{"a":"1"}' 'eyJhIjoiMSJ9'
context.type 'json' 'base64'
context.contentType 'application/json' 'application/octet-stream'

Использование расширений позволяет переложить нагрузку по поддержанию форматов с databoom на разработчиков (т.е. пользователей databoom), а заодно предоставит пользователям гибкость, которую не может предоставить не один BaaS.