В веб-API не является ли удаление DELETE ALL слишком опасным?

При изучении дизайна веб-API (независимо от конкретной технологии) я часто сталкиваюсь с этими двумя DELETE глагол:

DELETE /SomeResource/123   /* deletes entity with ID 123 */
DELETE /SomeResource/      /* deletes all entities */

У меня всегда возникает ощущение, что что-то не так с предоставлением последнего в качестве операции в большинстве приложений. В редких случаях, когда ресурс тривиален, конечно, почему бы просто не взорвать всю коллекцию без второй мысли? И да, я понимаю, что обычно работа клиентского приложения состоит в том, чтобы представить "Вы уверены?" подтверждение. Но мне нравится представлять, что мой API безопасно управляется даже неким агентом низкого уровня, таким как Fiddler.

Так есть ли какой-то механизм, который мне не хватает, например, способ для сервера /API инициировать какой-то диалог с клиентским агентом для получения подтверждения, прежде чем уничтожить 10000 записей клиентов?

РЕДАКТИРОВАТЬ Да, предположим, что я хочу предоставить функциональность для удаления всех сущностей в данном сценарии, но чувствую себя обязанным избежать этого из-за предполагаемой опасности (опечатки, невнимание и т. Д.; вещи, для которых предназначен диалог подтверждения пользовательского интерфейса))

1 ответ

Вы НИКОГДА не будете предоставлять возможность удалить все функции в веб-интерфейсе.

Хотя могут быть исключения, обычно это ужасная идея, потому что это позволяет пользователю выполнять необратимые действия. С другой стороны, подумайте, как ужасно было бы, если бы кто-то с дурным намерением нашел эту конечную точку!

Большинство библиотек, таких как ASP.NET, потребуют явной реализации каждого метода перед принятием запроса (это обрабатывается в ASP.NET во время маршрутизации). Итак, если вы не предоставите DELETE /someresource/ проблема никогда не возникнет. Это особенно здорово, потому что вы не можете случайно удалить данные опечаткой.

Если вы действительно, действительно хотите эту функциональность, вы должны быть на 100% уверены, что у вас есть причина иметь ее, потому что это опасная и опасная конечная точка.

Нижняя линия? Я бы не стал защищать ваши данные.

Другие вопросы по тегам