Question
My question is what is the disadvantage/drawback(technical or design) If I continue to use POST method instead of DELETE/PUT for deleting/updating the resource in Rest ?
The POST
request is not Idempotent
but the DELETE
request is Idempotent
.
An idempotent HTTP method is a HTTP method that can be called many times without different outcomes
Idempotency
is important in building a fault-tolerant
API.
Let's suppose a client wants to update a resource through POST
. Since POST is not an idempotent method, calling it multiple times can result in wrong updates. What would happen if you sent out the POST request to the server, but you get a timeout? Did the resource actually get updated? Did the timeout happen when sending the request to the server, or when responding to the client? Can we safely retry again, or do we need to figure out first what happened with the resource? By using idempotent methods, we do not have to answer this question, but we can safely resend the request until we actually get a response back from the server.
So, if you use POST for deleting, there will be consequences.
When we use POST instead of Delete in our rest API then we are snatching power of Idempotency from client.That means,By using POST we are saying to our API user that this API can produce differnent result upon hitting multiple time.
In case of Timeout, API user have to enquiry for the resource which he had made a request to delete.Then if found,he has to made a call to POST API to delete it.
Where if same request is made using Delete method.Then we are assuring our API user that multiple calls to same method will return same result. Hence he can raise any number of request untill he gets successful deletion instead of Timeout without inquiry.
Note : Maintaining Idempotency is the duty of API maker.Just putting Delete method do not give Idempotency.
HTTP Method
Idempotent
Description
Example
GET
Yes
Retrieves data from the server without changing its state.
GET /users/123
PUT
Yes
Replaces the current resource with the request payload.
PUT /users/123
<br> { "name": "John Doe", "email": "john.doe@example.com" }
DELETE
Yes
Deletes the specified resource.
DELETE /users/123
HEAD
Yes
Retrieves headers for a resource, similar to GET but without the body.
HEAD /users/123
OPTIONS
Yes
Describes the communication options for the target resource.
OPTIONS /users/123
POST
No
Creates a new resource or causes a change in state on the server. Each identical request may create a new resource.
POST /users
<br> { "name": "Jane Doe", "email": "jane.doe@example.com" }
PATCH
No
Applies partial modifications to a resource.
PATCH /users/123
<br> { "email": "new.email@example.com" }
Last updated