Как использовать ETag / If-Match с несколькими элементами - PullRequest
14 голосов
/ 23 марта 2012

Рекомендованным способом обработки оптимистической блокировки в интерфейсе RESTful является возвращение ETag из GET и предоставление If-Match на PUT, то есть:

GET /items/1  --> gives client an ETag for a single item
PUT /items/1  <-- client gives it back as If-Match for checking

Как использовать эту схему с несколькими элементами, например, если я хочу получить пакет GET для получения нескольких элементов из одного URI:

GET /items    --> How do I return multiple ETags for multiple items here? 

В качестве альтернативы, если ETags / If-Match не справляется с этой ситуацией, каков рекомендуемый подход? Или я должен просто свернуть свой собственный?

1 Ответ

20 голосов
/ 26 марта 2012

tl; dr : все в порядке, чтобы назначить etags ресурсу, который содержит «коллекцию», но это приложение должно управлять идентификацией / изменением элементов в этой коллекции при определении действительногоetag.

Ресурс в архитектурном стиле REST не подразумевает, что это отдельный элемент или коллекция.Он просто представляет состояние приложения в заданной точке рабочего процесса.Ресурс будет содержать описательные данные и, надеюсь, ссылки на возможные последующие шаги в этой точке рабочего процесса.Рабочий процесс может быть таким же простым, как получение статуса заказа, или сложным, как оформление заказа на сайте электронной коммерции с возможностью отмены заказа.

etag - это механизм определения того,конкретное состояние (ресурс) актуально или нет.Назначение etag ресурсу, который возвращает коллекцию данных, означает, что ваше приложение идентифицирует это состояние элементов коллекции в этой точке, и если что-либо в этих элементах изменится, предыдущее значение etag больше не будет действительным.Ваше приложение должно решить, когда элементы коллекции изменятся и как идентифицировать отдельные элементы.Другими словами, etags применяются к ресурсам, но не к отдельным компонентам данного ресурса.

...