Лучшая практика для обновления структурированного ресурса через REST? - PullRequest
5 голосов
/ 17 ноября 2009

У меня есть клиентский интерфейс, который позволяет пользователю выполнять несколько правок в виде древовидного контура. Я считаю, что совокупность записей, составляющих эту схему, в целом представляет собой единый ресурс (/ outlines / 39), хотя к его частям можно обращаться как к отдельным ресурсам через разные URL-адреса.

Проблема в том, что пользователь может редактировать существующие узлы в схеме, а также добавлять новые узлы в схему. Обычно, когда вы редактируете что-то, вы помещаете его изменения, а когда вы добавляете что-то новое, вы помещаете это; однако в некоторых случаях вы захотите объединить все изменения, включая как добавления, так и изменения, в одну транзакцию. Какими практическими способами люди справляются с этим?

Даже если контур уже существует и PUT кажется подходящим, встроенные добавления нарушают идемпотентность PUT. Я не уверен, что POST тоже кажется уместным. Для целей проектирования я решил не сохранять каждое отдельное обновление, которое делает пользователь, хотя, полагаю, это предлагает одно решение. Тем не менее, должны быть другие, которые занимались моей проблемой или имеют идеи по этому поводу.

Ответы [ 2 ]

1 голос
/ 17 ноября 2009

Есть ли способ сделать идемпотентное добавление? Например. если у узлов был естественный ключ, то когда клиент попытался добавить узел во второй раз, вы ничего не могли сделать.

0 голосов
/ 17 ноября 2009

Как насчет: создать новый ресурс: / outlines / 39 / Transactions и отправить свою транзакцию в этот ресурс, например,

POST "addNode = node1, addNode = node2, editNode = node3, newName = foobar" в / outlines / 39 / Transactions

...