How can Rails' REST implementation be said to be REST at all?
===

So, I'm learning Ruby on Rails. I get the fundamentals of the RESTful approach to application architecture, but I haven't yet built a RESTful application completely.

In a traditional web application, idempotent requests (which don't change any state) are made via HTTP's `GET` method and all non-idempotent requests are typically made via the `POST` method. For the application to distinguish between the different actions a `POST` request might be triggering, there's usually a hidden field in the form that gets included with the `POST` request, like `action=delete` or `action=add_to_foo_file`. This is a fairly simple architecture and is pretty common today, but the REST approach steers us away from this and suggests that this "let's POST everything!" design is considered harmful.

Instead, a RESTful architecture has us manipulating resources via the URIs which uniquely identify them (nouns) and the HTTP request methods (verbs), instead of determining what action to take based on a separate field in the request:

    GET    => show the resource
    PUT    => update the resource
    POST   => create a new resource
    DELETE => destroy the resource

So now we come to Ruby on Rails. In Rails, `PUT` and `DELETE` are implemented by JavaScript, which changes your links into forms with a hidden field called `_method`. The form is received from the browser via `POST`, and then Rails looks for this field and decides whether to route the request to the `PUT` or `DELETE` methods of the controller.

Wait, what? That sounds suspiciously like -- even exactly like -- the behavior of a traditional web application, which receives all state-changing requests via `POST` and inspects specific fields to decide whether to destroy or modify a record.

**So how can Rails' approach be said to be RESTful *at all*, since under the hood, it is just a re-implementation of the "let's POST everything" approach which REST specifically attempts to move away from?**

And further, **doesn't this approach prevent my Rails app from ever degrading gracefully for people with JS turned off in the browser?**