Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax request, should it be POST or PUT

I have created a Spring MVC web app.

The app makes a few calls to the controller. These calls are close/open/end game.

I make these calls using Ajax, so I can handle a response on the top of the page.

ajaxPost = function (url, action, id, onSuccess, onError) {
    $.ajax({
        type: "POST",
        url: url + "?" + action + "=" + id,     
        success: function(response) {
            if(onSuccess !== null) {
                onSuccess(response);
            }
        },                                      
        error: function(e) {
            if(onError !== null) {
                onError(e);
            }                           
       }                
    });
};

The question I have is that I'm using 'POST' for the Ajax request, is that correct, or should it be 'PUT'?

My controller has a default URL, and I'm using the param attribute to decide which method to call, as I have many buttons on the page.

@RequestMapping(params = "open", method = RequestMethod.POST)

@RequestMapping(params = "close", method = RequestMethod.POST)

It doesn't sit well with me that I'm using 'POST' for these calls. Maybe it should be 'PUT'...

Any suggestions? Does it matter?

like image 282
user1555190 Avatar asked Dec 01 '22 19:12

user1555190


2 Answers

It depends on what your request should do. So there's no general rule that you should use one over the other, they have different use cases.

POST for creating a record.
PUT for updating an existing record (or putting a record at a specified location/id).
See this wikipedia article for the definitions.

One thing to note is that PUT should be idempotent, doing the same PUT request multiple times should ideally produce the same result as doing a single PUT request. However, POST is not idempotent, so doing several POST requests should (or will) create multiple new records.

So after having read this you should check what your method does, and select the corresponding request method.

like image 77
Matsemann Avatar answered Dec 21 '22 17:12

Matsemann


Both PUT and POST may create a new record; PUT may also update/change an existing record.

The difference between POST and PUT is that PUT is expected to address the record with it's ID, so that the server knows what ID to use when creating (or updating) the record, while POST expects the server to generate an ID for the record and return it to the client after the record has been created.

Thus, a POST is addressed to the resource as a collection: POST /resource, while PUT is addressed to a single item in the collection: PUT /resource/1

like image 35
Ygg Avatar answered Dec 21 '22 18:12

Ygg