Отправлять ACK после использования результата веб-службы RESTful? - PullRequest
1 голос
/ 23 декабря 2011

Рассмотрим очередь элементов на сервере. Затем клиент считывает 10 элементов в очереди одновременно, используя веб-сервис REST. Естественно, когда клиент использует эти элементы, сервер должен удалить их на стороне сервера.

В: Каков наилучший подход, если принять во внимание надежность, нагрузку на сеть и устойчивость?

Я могу придумать три возможных решения:

Клиент запрашивает новые предметы. Сервер то ...

  1. отправляет элемент 1..10 (GET) и немедленно удаляет их. Надеюсь, что товары прибыли к клиенту.
  2. отправляет элемент 1..10 (GET), клиент отправляет ACK для 1..10 (DELETE), а сервер удаляет элементы.
  3. отправляет элемент 1..10 (GET). В следующий раз, когда клиент запросит 11..20 (GET), предыдущие элементы будут удалены на сервере.

Я считаю, что и № 1, и № 3 нарушают принцип отдыха. Например. Только метод DELETE может удалять объекты. Однако они оба избегают трафика данных для команды ACK.

Не уверен, что здесь лучше. Возможно, есть еще лучшее решение?

1 Ответ

0 голосов
/ 24 декабря 2011

Вот ответ в голосовом формате.Я надеюсь, что это поможет прояснить ваши параметры немного подробнее.

В архитектуре в стиле REST важно, чтобы реализация API не изменила реализацию каких-либо базовых протоколов - в этом случаеэто означает, что GET запросов должны быть идемпотентными.Хотя идемпотент не означает, что лежащие в основе ресурсы не могут изменяться или уходить навсегда (AKA быть удаленными), то, что это происходит как прямой или косвенный результат GET, похоже, не соответствует духу протокола.

Любая система, которая гарантирует доставку сообщения, требует, чтобы какое-то рукопожатие сообщило, что предполагаемый получатель успешно получил сообщение - если HTTP является рассматриваемым протоколом, то это подразумевает два запроса.Даже в случае, когда поведение GET было изменено для ленивого удаления ресурсов, рукопожатие все еще присутствует - оно только что было сдвинуто во времени.Опять же, если HTTP является протоколом в вопросах, то лучше использовать существующие методы GET, а затем DELETE для поиска и удаления для этого рукопожатия.Результат не должен облагать налогом сеть больше, чем любой эквивалентный подход.

...