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, вы застряли в поиске формата сериализации для ваших данных, который поддается стандартным различиям. (Тем не менее, без форматируемого формата вы все равно можете отправить клиенту последовательность операций для воспроизведения любых устаревших объектов.)