В случае запросов DELETE, которые могут каскадироваться при удалении большого количества данных, должен ли мой REST API слепо продолжить или предупредить об этом и запросить подтверждение?Должен ли REST API защищать данные позади?
Я создаю API, который абстрагирует манипуляции сложными данными, хранящимися в реляционной БД. Удаление элемента, на который ссылаются другие элементы, следует логически удалить их, а затем выполнить каскад.
Простым примером (не связанным с реальным случаем) будет набор из трех таблиц «Дерево/Ветвь/Лист»: Листовые строки имеют внешний ключ к идентификатору филиала, а строки ветви аналогично включают в себя идентификатор дерева. API позволяет DELETE на любом уровне, но если вы удалите элемент дерева, он будет внутренне каскадом удалять все ветви и листы, которые прямо или косвенно ссылаются на него.
Так на DELETE запрос для дерева, API может:
- просто соблюдать и не все каскадные абсорбция
- отказаться на том основании, что это нарушило бы целостность, так что вы должны удалить все зависимые пункты вручную сначала (не очень практично)
- ничего не удалять и отправить заявление «это удалит 1 дерево, 31 ветви и 987 листьев, пожалуйста, подтвердите». Подтверждение может принимать форму дополнительного заголовка или суффикса в URL (/ force), но ни один из них не является очень REST, и по моему опыту такие вещи часто напрямую обходят при написании клиентов (на самом деле отправляется только запрос на удаление + подтверждение). Я также сомневаюсь в HTTP-коде для такого ответа.
Я склонен думать, что API должен оставаться простым, и что защита должна быть в клиенте, но ценит внешнюю мудрость.
Спасибо за ваши мысли. Я думаю, что попробую идею «восстановить», не изменив слишком много, таким образом сделав удаление простым и возможным. Тем не менее, по-прежнему нет никакой идеи о том, как подгонять этот undelete в модели REST. – Tehel
@Tehel одна возможность состоит в том, чтобы сделать товар доступным в отдельной коллекции «мусора». – Evert