user1555190
user1555190

Reputation: 3243

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?

Upvotes: 4

Views: 12298

Answers (3)

Matsemann
Matsemann

Reputation: 21784

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.

Upvotes: 9

Ygg
Ygg

Reputation: 3870

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

Upvotes: 8

user1864610
user1864610

Reputation:

Use POST. Always use POST, unless you're absolutely rock-solid certain that PUT is properly supported by your hosting system.

Upvotes: 1

Related Questions