Making REST Requests: "Amazon SimpleDB REST calls are made using HTTP GET requests. The Action query parameter provides the method called and the URI specifies the target of the call. Additional call parameters are specified as HTTP query parameters. The response is an XML document that conforms to a schema."
This is not unlike shipping a database that lets you update by embedding actions in SELECT statements. The underlying issue here is the uniformity of the GET method across the web - what clients and intermediaries are allowed to assume about it. Here's the basic advice on GET and POST from the W3C:
- Use GET if:
- The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
- Use POST if:
- The interaction is more like an order, or
- The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
- The user be held accountable for the results of the interaction.
Designing in side-effects to GET requests is a fundamental mistake of web development that people who don't understand the web/http tend to make. It's less common now than it used to be, but I'm suprised to see it in a web API from one the biggest web properties and doubly surprised to see it called "REST". This is pity as the commercial and technical properties of the database itself are interesting. Ascribing REST to the SimpleDb API might be down to lack of knowledge or marketecture; hopefully they'll get the API* sorted out soon, before it gets used heavily. See also Keith Gaughan's observations, which extend to SQS and FPS.
For an example of a better design for this class of problem, see Google code's use of subversion. Now, I know that svn over dav isn't normally promoted as an API, but it is.
The other downside is the way the privately defined markup is tied to the operations - stuff like "PutResponse" is quite the turn-of-the-century-webservices way of doing things. I spend a good bit of time looking at markup like in that the mobile space. It all could be a good deal simpler.
* by "API" here, I mean an application protocol interface.