Лучшая практика REST: синхронизация клиента с сервером - PullRequest
3 голосов
/ 05 марта 2010

У меня есть REST-сервер и клиентское приложение, работающее на мобильном устройстве. Клиент имеет некоторые данные и хотел бы получать обновления данных с сервера. Как мне сделать это RESTful способом в одной транзакции ?

Предположим, клиент имеет следующие элементы:

  widget id=1 timestamp=2010-03-05T08:00:00
    doodad id=1 widget=1 timestamp=2010-03-05T08:10
    doodad id=2 widget=1 timestamp=2010-03-05T08:20
  widget id=2 timestamp=2010-03-05T09:00:00
    doodad id=3 widget=2 timestamp=2010-03-05T08:10

а на сервере

  widget id=1 timestamp=2010-03-05T08:00:00
    doodad id=1 widget=1 timestamp=2010-03-05T08:10
    doodad id=2 widget=1 timestamp=2010-03-05T09:00
    doodad id=4 widget=1 timestamp=2010-03-05T08:30
  widget id=2 timestamp=2010-03-05T10:00:00
    doodad id=3 widget=2 timestamp=2010-03-05T09:10
    doodad id=5 widget=2 timestamp=2010-03-05T08:30

Сервер должен вернуть что-то вроде

  doodad id=2 widget=1 timestamp=2010-03-05T09:00
  doodad id=4 widget=1 timestamp=2010-03-05T08:30
  widget id=2 timestamp=2010-03-05T10:00:00
  doodad id=3 widget=2 timestamp=2010-03-05T09:10
  doodad id=5 widget=2 timestamp=2010-03-05T08:30

содержит только измененные строки.

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

Если бы я собирался сделать несколько подключений, я мог бы, вероятно, заставить клиента генерировать запросы GET для каждого элемента, который он имеет, с идентификатором и отметкой времени, и сервер мог бы ответить ни с чем (304 Не изменено) или обновленными значениями, в зависимости от ситуации , Например: "ПОЛУЧИТЬ /widgets/ndomid‹;timestamp=xxx".

Каков наилучший способ сделать то же самое в одной транзакции? Могу ли я сделать что-то вроде «GET / changes», и тело будет иметь значения типа (widget или doodad), id и метки времени для каждой строки, уже имеющейся у клиента? Я думаю, что знаю, как вернуть значения (как набор изменений), но как клиент запрашивает их?

Спасибо, Ральф

Ответы [ 2 ]

0 голосов
/ 06 марта 2010

Мне нравится третий ответ на этот вопрос: Шаблоны для обработки пакетных операций в веб-сервисах REST?

0 голосов
/ 05 марта 2010

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

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