Search code examples
ruby-on-railshttpdelete-method

Why use HTTP PUT and DELETE methods instead of POST?


 new_story GET     /story/new(.:format)  {:action=>"new", :controller=>"stories"}
edit_story GET     /story/edit(.:format) {:action=>"edit", :controller=>"stories"}
     story GET     /story(.:format)      {:action=>"show", :controller=>"stories"}
           PUT     /story(.:format)      {:action=>"update", :controller=>"stories"}
           DELETE  /story(.:format)      {:action=>"destroy", :controller=>"stories"}
           POST    /story(.:format)      {:action=>"create", :controller=>"stories"}

In web development I have done with other technologies, I only ever used GET and POST methods, but with RESTful routes in Rails, by default the PUT and DELETE methods are used for the update and destroy actions. What's the advantage or need for using PUT and DELETE? I assume these methods are just another way of doing POST - but why not just stick with POST?


Solution

  • The advantage is mostly semantic, and can also simplify URLs to an extent. The different HTTP methods map to different actions:

    POST   => create a new object
    DELETE => delete an object
    PUT    => modify an object
    GET    => view an object
    

    Then, in theory, you can use the same URL, but interact with it using different methods; the method used to access the resource defines the actual type of operation.

    In practice, though, most browsers only support HTTP GET and POST. Rails uses some "trickery" in HTML forms to act as though a PUT or DELETE request was sent, even though Rails is still using GET or POST for these methods. (This explains why you might not have used DELETE or PUT on other platforms.)