REST: Как я могу удалить ресурс и, при желании, удалить еще один? - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно удалить какой-то ресурс, но я хотел бы позволить клиенту решить, следует ли удалить связанный ресурс вместе с ним или оставить его.

Например, предположим, что у меня есть какой-то проект, который содержит несколько клиентов. Когда я хочу удалить проект, я хотел бы указать в запросе, удалять ли связанных с ним клиентов или нет.

Поэтому я спрашиваю, могу ли я сделать что-то вроде этого:

DELETE http://..../.../someproject?deletecustomers=true

Спасибо.

1 Ответ

1 голос
/ 04 августа 2020

Одним из немногих ограничений, накладываемых архитектурой REST на общий дизайн, является кэширование. Кэширование в HTTP работает со всем URI, который действует как ключ кеширования, где значение соответствует кешированному ответу представления. Любая небезопасная операция, выполняемая с этим URI, такая как POST, PUT, DELETE, ..., приведет к удалению этого сохраненного ответа (также если превышен определенный временной порог). При добавлении дополнительных параметров к URI кэш, который де-факто действует с полным URI, может не найти представление ресурса, чтобы его удалить. Еще одна проблема с удалением ассоциированного ресурса в фоновом режиме заключается в том, что он обходит любые кеши, поэтому они не заметят этого удаления в первую очередь и могут обслуживать клиентов с устаревшим ответом. Таким образом, особенно если клиент принимает решение об удалении связанного ресурса, лучше выполнить второй запрос DELETE.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...