Use URLs to specify your objects, not your actions:
Note what you first mentioned is not RESTful:
/questions/show/<whatever>
Instead you should use your URLs to specify your objects:
/questions/<question>
Then you perform one of the below operations on that resource.
GET:
Used to obtain a resource, query a list of resources, and also to query read only information on a resource.
To obtain a question resource:
GET /questions/<question> HTTP/1.1
Host: wahteverblahblah.com
To list all question resources:
GET /questions HTTP/1.1
Host: wahteverblahblah.com
POST:
Used to modify and update a resource
POST /questions/<existing_question> HTTP/1.1
Host: wahteverblahblah.com
Note that the following is an error:
POST /questions/<new_question> HTTP/1.1
Host: wahteverblahblah.com
If the URL is not yet created, you should not be using POST to create it while specyfing the name. This should result in a resource not found error because does not exist yet. You should PUT the resource on the server first.
You could though do something like this to create a resources using POST:
POST /questions HTTP/1.1
Host: wahteverblahblah.com
Note that in this case the resource name is not specified, the new objects URL path would be returned to you.
DELETE:
Used to delete the resource.
DELETE /questions/<question> HTTP/1.1
Host: wahteverblahblah.com
PUT:
Used to create a resource, or overwrite it. While you specify the resources new URL.
For a new resource:
PUT /questions/<new_question> HTTP/1.1
Host: wahteverblahblah.com
To overwrite an existing resource:
PUT /questions/<existing_question> HTTP/1.1
Host: wahteverblahblah.com
...Yes they are the same.
Using REST in HTML forms:
The HTML5 spec defines all of GET, POST, PUT and DELETE for the form element.
The method content attribute is an enumerated attribute with the following keywords and states:
- The keyword GET, mapping to the state GET, indicating the HTTP GET
method.
- The keyword POST, mapping to the state POST, indicating the HTTP POST
method.
- The keyword PUT, mapping to the state PUT, indicating the HTTP PUT
method.
- The keyword DELETE, mapping to the state DELETE, indicating the HTTP
DELETE method.