Я разрабатываю REST API и собираюсь разобраться с пакетным | одиночным DELETE. Много читать, понимать, что не рекомендуется разрешать групповое удаление. И не будет пытаться передать несколько идентификаторов с параметрами или выполнить любой POST-хак.
Я пришел к следующему:
DELETE /resources/{ID}:IamSure
Удаляет ресурс с идентификатором {ID}
DELETE /resources/:IamSure[?filters][sort][limit]
Удаляет ресурсы, соответствующие необязательным фильтрам в пределах лимита.
:IamSure
является «методом подтверждения», поэтому невозможно вызвать DELETE
вместо GET
по ошибке. Другие методы выдают ошибку, если добавлено :IamSure
.
Все вышеперечисленные функции:
Резервное копирование всего тела удаленных ресурсов / с плюс ответ, отправленный после успешного завершения операции в JSON (возможно, в zip) в облако:
/backup/resources/[{ID}/]apiuser_datetime
еще 2 функции:
GET /backup/resources/[{ID}]
- возвращает список резервных URI, соответствующих URL (/ resource / [{ID}])
GET /backup/resources/[{ID}/]apiuser_datetime
- возвращает тело резервной копии
Тело резервной копии можно напрямую использовать для воссоздания всех удаленных ресурсов. Если какой-то подключенный ресурс пропадет, API выдаст ошибку.
Поскольку я построил систему возможностей и методов для пользователей / приложений API поверх системы возможностей объектов для системных пользователей (которые «владеют» пользователями API) / apps), любой пользователь API, разрешенный этими 2 системами для GET
конкретного ресурса / ов, также сможет GET /backup
этого ресурса / ов - потому что метод, область действия и возможности объекта совпадают.
Any злонамеренная или случайная попытка удаления ресурсов будет записана (кто и когда) и будет обратимой - просто тело POST с тем же URL.
Операции удаления не очень распространены, поэтому я не беспокоюсь (сейчас) о хранилище - особенно потому, что он будет облачным и редко будет доступен.
Видите ли вы какие-либо недостатки / проблемы в этом подходе?
РЕДАКТИРОВАТЬ:
Не могли бы вы добавить другое подтверждение для партии УДАЛИТЬ, как „: IamReallySure”? поэтому «Я забыл об id» не приведет к havo c.
Или вы бы оставили DELETE / resource / {ID} без необходимости подтверждения, поскольку это стандартное поведение в REST