RESTful Soft Delete
You should use DELETE
.
What you intend to do with your data is called "soft deleting": you set a flag and avoid flagged items from appearing. This is internal to your webapp and the user doesn't have to know that you're soft deleting instead of deleting or whatever you want to do. This is why you should use the DELETE
verb.
I think there is no definitive answer. I'd rely on whether 1. the soft-delete, recover and destroy actions are an actual feature of your api OR 2. soft-delete is merely a "paranoid" database engineering pattern.
-
The "soft" deletion is transparent for the api client, in which case using the
DELETE
verb seems like the way to goEverything is as if the item was to be removed once and for all, but engineers want to keep it somewhere in the database
-
Api clients have the ability to recover or destroy the soft deleted resource, in which case soft deletion and recovery can use
POST
on a different action url like/resource/:id/softdelete
and the destroy action would be the one usingDELETE
.Another way to go may be to use
DELETE
with no query parameter to soft delete, and add?destroy=true
to actually destroy. But this approach seems less explicit and more prone to errors.