У меня есть 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 и метки времени для каждой строки, уже имеющейся у клиента? Я думаю, что знаю, как вернуть значения (как набор изменений), но как клиент запрашивает их?
Спасибо, Ральф