RESTful Soft Delete

Я пытаюсь создать RESTful webapp, в котором я использую GET, POST, PUT и DELETE. Но у меня возник вопрос об использовании DELETE в этом приложении.

Сначала немного фона:

Мой webapp управляет универсальными объектами, которые также управляются (и, как всегда, всегда создаются) в другой системе. Таким образом, в моем webapp каждый объект будет храниться в базе данных с помощью уникального ключа. Но способ, которым мы будем обращаться к ним через URL-адреса, - это уникальный ключ другой системы.

Я считаю, что простой пример сделает это ясным. Возьмите URL /entity/1. Это отобразит информацию для объекта с идентификатором 1 в другой системе, а не для моей собственной системы. Фактически, идентификаторы в моей системе будут полностью скрыты. Не будет схемы URL для доступа к объекту с идентификатором 1 в моей собственной системе.

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

В моей системе будет существовать способ "удалить" объекты, но я помещаю туда кавычки, потому что на самом деле они не будут удалять их из базы данных. Скорее, он будет отмечать их свойством, которое предотвращает его появление при переходе в /entity/1.

Из-за этого я чувствую, что должен использовать PUT ("удаление" таким образом будет идемпотентным), так как я с точки зрения данных просто устанавливаю свойство.

Таким образом, вопрос: имеет ли подход RESTful верность данным (в этом случае ясно, что я PUT ing), или представление данных в приложении (в этом случае кажется, что я DELETE)?

Ответ 1

Вы должны использовать DELETE.

То, что вы намерены делать с вашими данными, называется "мягким удалением": вы устанавливаете флаг и избегаете появления помеченных элементов. Это является внутренним для вашего webapp, и пользователь не должен знать, что вы мягко удаляете, а не удаляете или что хотите. Вот почему вы должны использовать глагол DELETE.