Разработка REST API для службы синхронизации данных - PullRequest
0 голосов
/ 27 мая 2019

Какова наилучшая практика для операции синхронизации данных между клиентом и сервером?

У нас есть 2 (или более) ресурса:

  1. cars -> год выпуска, модель, двигатель
  2. toys -> цвет, марка, вес

И нам нужно получать обновленные ресурсы с сервера в случае каких-либо обновлений на них. Например: кто-то внес изменения с другого клиента в те же данные, и нам нужно перенести эти обновления в наше клиентское приложение.

Запрос:

http://api.example.com/sync?data=cars,toys (глагол?)

http://api.example.com/synchronizations?data=cars,toys (виртуальный ресурс "синхронизации")

Ответ со смешанными данными:

код статуса: 200

{
  message: "ok",
  data: {
    cars: [
        {
          year: 2015,
          model: "Fiat 500"
          engine: 0.9
        },
        {
          year: 2004,
          model: "Nissan Sunny"
          engine: 1.3
        }
    ],
    toys: [
        {
          color: "yellow",
          brand: "Bruder"
          weight: 2
        }
    ],
  }
}

или ответ с кодом состояния 204, если обновления недоступны. По моему мнению, делать раздельные HTTP-звонки не очень хорошее решение. Что если у нас будет 100 ресурсов (= 100 http-вызовов)?

1 Ответ

1 голос
/ 27 мая 2019

Я не эксперт, но один из методов, которые я использовал в прошлом, - это запросить «подпись» данных, а не всегда собирать и получать данные.Подпись может быть хешем данных, которые вы ищете.Итак, поток будет выглядеть примерно так:

  1. Получить хэш подписи данных
http://api.example.com/sync/signature/cars

, который возвращает хэш подписи

Проверьте, отличается ли подпись от времени последнего получения данных

Если подпись отличается, перейдите и получите данные

http://api.example.com/sync/cars
Пусть REST также добавит новую подпись к данным
{
  message: "ok",
  data: {
    cars: [
        {
          year: 2015,
          model: "Fiat 500"
          engine: 0.9
        },
        {
          year: 2004,
          model: "Nissan Sunny"
          engine: 1.3
        },
    ],
    signature: "570a90bfbf8c7eab5dc5d4e26832d5b1"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...