2015-05-06 2 views
2

Контекст

Я создаю основной REST API -I не очень заботиться о цели, это просто ПРИМЕР-, где у меня есть корзина, содержащий:Параллелизм в REST API

  • Список элементов, соответствующих различным продуктам.
  • A: ВРЕМЯ, ПОКУПКИ. Тележка имеет ограниченный срок действия.
  • Ссылка на платеж: я не захожу подробно.

Клиент может взаимодействовать с тележкой через POST, добавляя детали и количество на нем. Добавляемые элементы создают под-ресурсы, клиент может обрабатывать элементы путем обновления (PUT) или удаления (DELETE) их.

Как что: https://blog.apigee.com/detail/does_your_api_need_to_be_truly_restful

Сервер отвечает обновить статус телеге. Я надеюсь, что это не нарушает принципы REST, но он будет обновляться либо:

  • с ПРИОБРЕТЕННЫМИ, когда оплата производится (оплата ссылка из корзины ресурса и все элементы будут удалены)
  • с TIMEOUT, когда первый элемент добавлен в корзину.

Проблема

Клиент изменить телеги ресурс путем добавления элементов. Сервер изменил его «в одиночку», когда истекло время ожидания.

Параллелизм возникает, когда клиент присоединяет элементы после истечения таймаута.

Чтобы решить проблему, оптимистичный замок кажется подходящим. Затем с заголовком ETag клиент изменяет ресурс корзины и знает, когда кто-то другой его модифицировал.

Вопрос

В этом случае параллелизм между клиентом и сервером.

Уместно ли обновлять заголовок ETag (Last-Modified), когда сервер модифицировал сам ресурс?

Спасибо!

ответ

3

Да. Это подходящее использование ETag.

Заголовок ответа ETag должен измениться, если в тележке появились новые предметы или когда статус тележки изменился, например. к EXPIRED.

Клиент может запомнить ETag и отправить его, когда пользователь изменяет корзину, в заголовке запроса if-match (при вызовах PUT/POST/DELETE). Затем сервер должен вернуть код 412, если его ETag отличается.

+1

Отлично, спасибо!(кстати, я не могу поддержать ваш ответ из-за моей низкой репутации <15) – AilurusFulgens

Смежные вопросы