What is the difference between PUT, POST and PATCH?

361,787

Solution 1

Difference between PUT, POST, GET, DELETE and PATCH in HTTP Verbs:

The most commonly used HTTP verbs POST, GET, PUT, DELETE are similar to CRUD (Create, Read, Update and Delete) operations in database. We specify these HTTP verbs in the capital case. So, the below is the comparison between them.

  1. Create - POST
  2. Read - GET
  3. Update - PUT
  4. Delete - DELETE

PATCH: Submits a partial modification to a resource. If you only need to update one field for the resource, you may want to use the PATCH method.

Note:
Since POST, PUT, DELETE modifies the content, the tests with Fiddler for the below url just mimicks the updations. It doesn't delete or modify actually. We can just see the status codes to check whether insertions, updations, deletions occur.

URL: http://jsonplaceholder.typicode.com/posts/

  1. GET:

GET is the simplest type of HTTP request method; the one that browsers use each time you click a link or type a URL into the address bar. It instructs the server to transmit the data identified by the URL to the client. Data should never be modified on the server side as a result of a GET request. In this sense, a GET request is read-only.

Checking with Fiddler or PostMan: We can use Fiddler for checking the response. Open Fiddler and select the Compose tab. Specify the verb and url as shown below and click Execute to check the response.

Verb: GET

url: http://jsonplaceholder.typicode.com/posts/

Response: You will get the response as:

"userId": 1,  "id": 1,  "title": "sunt aut...",  "body": "quia et suscipit..."

In the “happy” (or non-error) path, GET returns a representation in XML or JSON and an HTTP response code of 200 (OK). In an error case, it most often returns a 404 (NOT FOUND) or 400 (BAD REQUEST).

2) POST:

The POST verb is mostly utilized to create new resources. In particular, it's used to create subordinate resources. That is, subordinate to some other (e.g. parent) resource.

On successful creation, return HTTP status 201, returning a Location header with a link to the newly-created resource with the 201 HTTP status.

Checking with Fiddler or PostMan: We can use Fiddler for checking the response. Open Fiddler and select the Compose tab. Specify the verb and url as shown below and click Execute to check the response.

Verb: POST

url: http://jsonplaceholder.typicode.com/posts/

Request Body:

data: {
   title: 'foo',
   body: 'bar',
   userId: 1000,
   Id : 1000
}

Response: You would receive the response code as 201.

If we want to check the inserted record with Id = 1000 change the verb to Get and use the same url and click Execute.

As said earlier, the above url only allows reads (GET), we cannot read the updated data in real.

3) PUT:

PUT is most-often utilized for update capabilities, PUT-ing to a known resource URI with the request body containing the newly-updated representation of the original resource.

Checking with Fiddler or PostMan: We can use Fiddler for checking the response. Open Fiddler and select the Compose tab. Specify the verb and url as shown below and click Execute to check the response.

Verb: PUT

url: http://jsonplaceholder.typicode.com/posts/1

Request Body:

data: {
   title: 'foo',
   body: 'bar',
   userId: 1,
   Id : 1
}

Response: On successful update it returns status 200 (or 204 if not returning any content in the body) from a PUT.

4) DELETE:

DELETE is pretty easy to understand. It is used to delete a resource identified by a URI.

On successful deletion, return HTTP status 200 (OK) along with a response body, perhaps the representation of the deleted item (often demands too much bandwidth), or a wrapped response (see Return Values below). Either that or return HTTP status 204 (NO CONTENT) with no response body. In other words, a 204 status with no body, or the JSEND-style response and HTTP status 200 are the recommended responses.

Checking with Fiddler or PostMan: We can use Fiddler for checking the response. Open Fiddler and select the Compose tab. Specify the verb and url as shown below and click Execute to check the response.

Verb: DELETE

url: http://jsonplaceholder.typicode.com/posts/1

Response: On successful deletion it returns HTTP status 200 (OK) along with a response body.

Example between PUT and PATCH

PUT

If I had to change my first name then send PUT request for Update:

{ "first": "Nazmul", "last": "hasan" }

So, here in order to update the first name we need to send all the parameters of the data again.

PATCH:

Patch request says that we would only send the data that we need to modify without modifying or effecting other parts of the data. Ex: if we need to update only the first name, we pass only the first name.

Please refer the below links for more information:

Solution 2

The below definition is from the real world example.

Example Overview
For every client data, we are storing an identifier to find that client data and we will send back that identifier to the client for reference.

  1. POST

    • If the client sends data without any identifier, then we will store the data and assign/generate a new identifier.
    • If the client again sends the same data without any identifier, then we will store the data and assign/generate a new identifier.
    • Note: Duplication is allowed here.
  2. PUT

    • If the client sends data with an identifier, then we will check whether that identifier exists. If the identifier exists, we will update the resource with the data, else we will create a resource with the data and assign/generate a new identifier.
  3. PATCH

    • If the client sends data with an identifier, then we will check whether that identifier exists. If the identifier exists, we will update the resource with the data, else we will throw an exception.

Note: On the PUT method, we are not throwing an exception if an identifier is not found. But in the PATCH method, we are throwing an exception if the identifier is not found.

Do let me know if you have any queries on the above.

Solution 3

Here is a simple description of all:

  • POST is always for creating a resource ( does not matter if it was duplicated )
  • PUT is for checking if resource exists then update, else create new resource
  • PATCH is always for updating a resource

Solution 4

PUT = replace the ENTIRE RESOURCE with the new representation provided

PATCH = replace parts of the source resource with the values provided AND|OR other parts of the resource are updated that you havent provided (timestamps) AND|OR updating the resource effects other resources (relationships)

https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1

Solution 5

Simplest Explanation:

POST - Create NEW record

PUT - If the record exists, update else, create a new record

PATCH - update

GET - read

DELETE - delete

Share:
361,787
selva kumar
Author by

selva kumar

Updated on December 06, 2021

Comments

  • selva kumar
    selva kumar over 2 years

    What is the difference between PUT, POST and PATCH methods in HTTP protocol?

  • Maladon
    Maladon over 7 years
    PUT is not update. PUT is create or replace the entity at the given URI. Per the HTTP spec, PUT is idempotent. Yes, it can be used to update, but thinking of only as update is not correct.
  • Atul Chavan
    Atul Chavan over 6 years
    i agree PUT is not update, it can be mapped with replace, because when you send PUT, it overrides the existing resource. But if we send PATCH, it will only replace specified entries.
  • Rob P.
    Rob P. over 6 years
    Because PUT can also be used to create, I'm not sure how your answer indicates which I should be using?
  • Vadorequest
    Vadorequest about 6 years
    This answer is much better, but doesn't compare with PATCH: stackoverflow.com/a/630475/2391795
  • ruffin
    ruffin about 4 years
    How is this substantially different from Kwame's answer posted about two weeks before yours?
  • ruffin
    ruffin about 4 years
    I'd probably add this distinction: "PUT if the client determines the resulting resource's address, POST if the server does it."
  • Polv
    Polv about 4 years
    What does "sometimes" idempotent really means? What determines idempotency?
  • Shayan
    Shayan over 3 years
    This is not how you properly send a POST, please check: stackoverflow.com/questions/7075125/…
  • Shayan
    Shayan over 3 years
    You should specify Content-Type in headers, and RequestBody is like this: title=foo&body=bar&userid=1000&id=1000
  • Sunil Garg
    Sunil Garg over 3 years
    you said, post should return 201 as status code, but i am checking your link for post, it returns the 200
  • Krishna
    Krishna over 3 years
    @SunilGarg: may be you didnt change the http verb to post . 200 is for get.
  • Sunil Garg
    Sunil Garg over 3 years
    @Krishna, i have checked in the browesser, request type is post id response is of status 200
  • Krishna
    Krishna over 3 years
    @SunilGarg : oh okay, this is what i did.. i'm using postman by the way. In postman, go to File--> New. Select the http verb as Post in the dropdown, Request url as 'jsonplaceholder.typicode.com/posts' and in the body paste 'data: { title: 'foo', body: 'bar', userId: 1000, Id : 1000 }' and then click on Send. I see the body as '{ "id": 101 } and Status: 201Created.. Let me know if u are following the same steps.
  • Chomeh
    Chomeh over 3 years
    This is not entirely accurate. 'The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics' is what the rfc states. 'Appending data to a resource's existing representation' is one of the rfc's supplied examples. tools.ietf.org/html/rfc7231#section-4.3.3
  • Jay Dadhania
    Jay Dadhania about 3 years
    Simple and clear explanation!
  • Jay Dadhania
    Jay Dadhania about 3 years
    "Sometimes idempotent" === Not idempotent - it either is or is not idempotent, there is no in-between.
  • akinuri
    akinuri about 3 years
    @Yokesh Waran Hey, I've made some edits on your answer. See if they're okay.
  • MikeyE
    MikeyE almost 3 years
    It seems like PUT means "update and overwrite". And seems like PATCH means "update and merge". I'm just trying to think of consistent and concise terms to describe what your answer nicely explains.
  • stevec
    stevec almost 3 years
    @Chomeh at what layer are those semantics/rfc defined? Is it a framework or language level config, or something specific to a particular part of the framework? Like, would node's POST/PUT/PATCH be different to ruby on rails' ?
  • Chomeh
    Chomeh almost 3 years
    @stevec Application / API. For example, you could design an API that accepts a POST to /delete, but doesn't necessarily have the result of creating a new resource (e.g. /deletions/{id}).
  • Saurabh Chaturvedi
    Saurabh Chaturvedi over 2 years
    Awesome simple !!!
  • arsene stein
    arsene stein about 2 years
    I can read in the comments that PUT changes the resource but the whole set of attributes has to be sent So how come is it that you can do "put email:[email protected]"??? Wasn't it supposed to be put { id:1 name:parth email:[email protected]} ??
  • aj go
    aj go almost 2 years
    I still don't get how PATCH behaves, because we can do a single update with PUT too