Ответ 1
Отвечая на мой собственный вопрос:
- Для этого обсуждения предположим, что мы храним "шарики" в ведрах
- Первое, что нужно заметить, это то, что жизненный цикл шара не определяется его содержащим ведром (перемещение шара из одного ведра в другое не удаляет старый шар). Таким образом, мы должны продвигать шары на ресурс верхнего уровня:
/balls
- REST, по-видимому, лучше всего работает с символическими ссылками, а не с встроенными значениями, поэтому вместо
GET /buckets/1
, возвращающего значение шара в ведро, пусть он возвращает URI шара.
Затем мы можем перемещать шары следующим образом:
(examine original state)
GET /buckets/1: "balls = {'/balls/1'}"
GET /buckets/2: "balls = {}"
GET /balls/1: "bucket = /buckets/1"
(move ball into bucket #2)
PUT /balls/1: "bucket = /buckets/2"
(examine new state)
GET /buckets/1: "balls = {}"
GET /buckets/2: "balls = {'/balls/1'}"
GET /balls/1: "bucket = /buckets/2"
Конечный результат: идентичность шара остается неизменной, поскольку она перемещается по ведрам и (что наиболее важно) эта операция является атомарной.