REST API с версионными данными и дифференциальной конечной точкой: оптимизация пропускной способности и производительности

Мой проект NodeJS основан на SailsJS, сам по себе использующий ExpressJS.

Его API будет использоваться мобильными приложениями для извлечения данных из него.

Сложность в том, что я не хочу, чтобы клиентские приложения извлекали все дерево данных каждый раз, когда происходит изменение в базе данных.

Клиенту нужно только загрузить разницу между данными, которые он уже получил, и данными на сервере.

Чтобы добиться этого, я подумал об использовании git на сервере. То есть создайте репозиторий и сохраните все конечные точки в виде файла json в репозитории. Каждое сохранение вызовет автоматическую фиксацию.

Затем я мог бы создать конкретную конечную точку API, которая будет принимать commit sha в качестве параметра и возвращать diff между этим и git HEAD.

Этот пост Уильяма Бентона утешил меня этой идеей.

Сейчас я ищу любые советы, которые могли бы помочь мне получить эту работу на основе языка и структур, упомянутых выше:

  • Я хотел бы увидеть подтверждение концепции в действии, но не смог найти
  • Я не мог найти простой способ использовать git с NodeJS.
  • Я не уверен, как анализировать возвращенные различия в клиентских приложениях, разработанных с помощью инфраструктуры IONIC, поэтому AngularJS.

Примечание: API будет только для чтения. Все перемещения БД будут инициироваться пользовательским веб-сервером, который используется немногими пользователями.

1 ответ

Я использовал идеи в этом посте для экспериментальной службы управления конфигурациями. Этот код написан на Erlang, и я не могу предложить конкретные предложения для Node, но у меня есть несколько общих советов.

Вызов самому git не был отличным вариантом на любом из языков, которые мне были интересны. Использование git в качестве универсального хранилища версионных объектов на самом деле работает на удивление хорошо, но использование git-сантехнических команд - это боль (и медленная, из-за разветвления), и были (опять же, в то время) ограничения для всех доступных нативных Git библиотеки.

Я закончил реализацию своей собственной структуры постоянных данных и положил поверх нее интерфейс, похожий на git. Хорошая вещь в этом состоит в том, что ваши различия могут быть чувствительны к формату данных, которые вы храните; если вы обращаетесь к git, вы застряли в поиске формата сериализации для ваших данных, который поддается стандартным различиям. (Тем не менее, без форматируемого формата вы все равно можете отправить клиенту последовательность операций для воспроизведения любых устаревших объектов.)

Другие вопросы по тегам