У меня есть интерфейс на стороне клиента, который позволяет пользователю выполнять несколько изменений по древовидной схеме. Я рассматриваю совокупность записей, составляющих этот контур, в совокупности, единственный ресурс (/ outlines/39), хотя его части могут быть доступны как отдельные ресурсы через разные URL-адреса.Лучшая практика обновления структурированного ресурса через REST?
Проблема заключается в том, что пользователь может редактировать существующие узлы в контуре, а также добавлять новые узлы в контур. Обычно, когда вы редактируете что-то, вы запускаете его изменения, и когда вы добавляете что-то новое, вы отправляете его; однако в некоторых случаях вы захотите перенести все изменения, включая как добавления, так и изменения, в одну транзакцию. Какими практическими способами люди справились с этим?
Несмотря на то, что контур уже существует и PUT кажется подходящим, встроенные добавляет нарушает идемпотентность PUT. Я не уверен, что POST тоже подходит. Для целей проектирования я решил не сохранять каждое дискретное обновление, которое делает пользователь, хотя я предполагаю, что это предлагает одно решение. Тем не менее, должны быть и другие, которые занимались моей проблемой или имели идеи об этом.
Нет естественный ключ, но это привело меня считать, что сервер (или клиент) может когда я создаю новые узлы. Таким образом, запись будет идентифицироваться по ее id и guid. Используя подсказки, я не в конечном итоге потребляю ids, если пользователь не может выполнить всю транзакцию. В этой заметке он задает вопрос об использовании ориентира в качестве ПК вместо семени идентичности. Подумаешь. Благодарю. – Mario
Интересно! Рад, что смог помочь. –
После дальнейших исследований я решил, что PUT будет только когда-либо правильным, если вы ВСЕПОСТАВЛЯЕТ ресурс. Поскольку я только вернул дельту (добавленные/обновленные/удаленные узлы), я думаю, что имеет смысл ПОТРЕБИТЬ эту дельта обратно к URL-адресу субресурсов, аналогичному предложению суб-ресурса транзакции. Я еще не разработал детали. – Mario