Работа с пакетом DELETE в REST API - PullRequest
0 голосов
/ 22 февраля 2020

Я разрабатываю 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

...