Как обеспечить согласованность при обновлении документа через REST API - PullRequest
0 голосов
/ 06 июня 2018

Я разрабатываю REST API, в котором два клиента будут обновлять его, возможно, одновременно: * Client A получит документ, потратит несколько минут на его обработку и изменение, а затем вернет его обратно.* Client B может в любое время поставить новый документ.

Проблема возникает, когда новый документ Client B PUT при Client A обрабатывает старую версию документа.В этом случае Client A в конечном итоге переопределит внесенные Client B изменения путем PUT'а модифицированной версии старого документа.Я хотел бы, чтобы Client A отбросил результат обработки.

Чтобы объяснить это лучше, вот пример простого (проблемного) рабочего процесса:

  1. Client A GET <-Версия документа 1 </li>
  2. Client B PUT -> Версия документа 2
  3. Client A PUT -> Версия документа 1.1

Требуемый рабочий процесс:

  1. Client A GET <- Версия документа 1 </li>
  2. Client B PUT -> Версия документа 2
  3. Client A PUT -> Ошибка.Client A отбрасывает результаты и перезапускает
  4. Client A GET <- Версия документа 2 </li>
  5. Client A PUT -> Версия документа 2.1

Очевидно, этоможет быть достигнуто версионированием документов каким-либо образом.Мой вопрос заключается в том, существует ли какой-то стандартный способ достижения этого (я уверен, что я не единственный, кто сталкивается с такой проблемой), или мне следует разработать собственное решение.

1 Ответ

0 голосов
/ 06 июня 2018

Вы ищете RFC 7232 .В частности, вам нужен заголовок If-Unmodified-Since или заголовок If-Match .Они сделают запрос PUT Клиента А условным, если ресурс не будет изменен на сервере.

...