2009-11-17 4 views
5

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

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

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

ответ

1

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

+0

Нет естественный ключ, но это привело меня считать, что сервер (или клиент) может когда я создаю новые узлы. Таким образом, запись будет идентифицироваться по ее id и guid. Используя подсказки, я не в конечном итоге потребляю ids, если пользователь не может выполнить всю транзакцию. В этой заметке он задает вопрос об использовании ориентира в качестве ПК вместо семени идентичности. Подумаешь. Благодарю. – Mario

+0

Интересно! Рад, что смог помочь. –

+0

После дальнейших исследований я решил, что PUT будет только когда-либо правильным, если вы ВСЕПОСТАВЛЯЕТ ресурс. Поскольку я только вернул дельту (добавленные/обновленные/удаленные узлы), я думаю, что имеет смысл ПОТРЕБИТЬ эту дельта обратно к URL-адресу субресурсов, аналогичному предложению суб-ресурса транзакции. Я еще не разработал детали. – Mario

0

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

POST "AddNode = node1, AddNode = node2, editNode = node3, NEWNAME = Foobar" в/очерчивает/39/сделок

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