I'm building a RESTful API command to deactivate a user record. Is it kosher to use DELETE to do this or should this be a PUT, since the record is being updated to "deactivated" status? Or is it just a matter of taste?
The semantics of DELETE
means that you are actually getting rid of the object. What you're doing here seems like a modification of the object's state. In this case a PUT
or PATCH
would be more appropriate.
It is better to stick with the semantics of uniform interface that you're using (in this case, HTTP verbs). If those match up to what you're actually doing within your app, then there is less confusion. Also, what if you decide later that a DELETE
should actually remove a record instead of just marking it "inactive"? Now you've changed the behavior of your API. Also, if you're using DELETE
, you're essentially following the "principle of least surprise", which is good for an API. It's better to have a DELETE
actually do a delete, rather than just pretending to do so.
On the other hand it is perfectly fine to remove the record from one location and move it elsewhere (from one table to another, for example) if it turns out that you are required to keep the data for historical purposes. In this case, that record should just remain unavailable to future operations (i.e., a GET
on the resource should return a 404
).