We've found in our RESTful research that POSTs are good for telling a web server to create a new instance of a resource and then return the new instance URI of that new resource.  PUT on the other hand, tells the web server to change something about an existing instance of a resource, so the instance must be uniquely identified to the web server.

When using POST, the query strings must be located in the "Request Body" and  not in the URI path, whereas, PUT requires the query strings to be in the URI path.  Examples:

POST /storage/volumes

Content-length: 26

{Request Body}

size=100&name=TestVolume01

Returns:

201 Created

Location: http://<ip>/storage/volumes/{id}

The service returns the successfully created response with the Location Header that includes the new URI to the new instance of the resource.

To modify an existing instance of a resource:

PUT /storage/volumes/{id}?size=200

Returns:

201 Created

Location: http://<ip>/storage/volumes/{id}

Notice that both return 201 Created.  Notice that PUT has the query strings in the URI line as opposed to POST having the query string (without the "?") in the Request Body.

Using POST to create something new has the advantage of a very large Request Body.  Using PUT to create something new would run into a character limitation on the URI line.

Jeff