Blog Archives
REST: the re-birth of HTTP
Hi guys,
this time I don’t want to talk about code or patterns but just only about an useful and interesting way of think.
Sometimes you have to interface your application with data across World Wide Web and in particular you need a way, possible a simple way, to do this.
In the last 10 years, many companies and many people have thought about a solution to furnish this data to users, building usually complex protocols and architectures (etc. SOAP).
“Envelopes, body, …….” and many many other incomprehensible constructs.
You can consider for example this “simple” and short SOAP message that allows you to POST a card to our hypothetical web service.
POST /NewCard HTTP/1.1
Host: http://www.card.com
Content-Type: application/soap+xml; charset=utf-8
SOAPAction: “http://www.card.com/soap/soap-envelope”
<?xml version=”1.0″?>
<soap:Envelope xmlns:soap=”http://www.card.com/soap/soap-envelope”>
<soap:Header>
<– another header?!?!? –>
</soap:Header>
<soap:Body>
<m:CardContent xmlns:m=”http://www.card.com/soap”>
<m:CardReceipient>Jane@card.com</m:CardReceipient>
<m:CardBody>Hi Jane, you were so beautiful last night!</m:CardBody>
</m:CardContent>
</soap:Body>
</soap:Envelope>
At first, it could seem an ordered and well organized way of communication,
but in my opinion this is a structure that we can associate only with this single web-service.
Another web-service will certainly use another type of format that doesn’t grant you to think to SOAP like something standard.
If we look in more detail we can see that I have put a terrified “<– another header?!?!? –>”.
That’s because if you consider the HTTP protocol and structure you are able to think about a way to reuse and maximize HTTP header and body use.
On the crest of this intuition it’s born a new idea that fully uses HTTP combining user and machine point of view.
It’s name is REST, that states for Representional State Transfer and that’s not a new protocol but a new software style architecture. In particular we are motivated to use HTTP status, responses,… as them are, without building complex response and formats.
If you consider our first example we can rewrite, rebuild and rethink that morbid and gloomy interface with a new one that respects REST principles:
POST http://www.card.com/cards
Content-Type: application/json
{
“receipient”:”jane@card.com”,
“message”:”Hi Jane, you were so beautiful last night!”
}
Do you really need any other explanation? 🙂
Wait wait and wait… this is good, understandable, reusable (not code but concepts that are based on HTTP) and any other adjective that you can imagine but it an hidden aspect that doesn’t allow to be portable at 100%.
Please be conscious that not all browsers support every HTTP request; if you consider a basic browser, it allows user to GET pages and POST(with buttons) messages but it doesn’t allows to DELETE an old message.
That’s not a really great problem because we can bypass it with a workaround (POST http://www.card.com/cards?id=5&action=DELETE) but that don’t respect HTTP protocol and that falls in a REST-RPC mechanism.
You could say “Oh what are you saying? This not the end of world…” and I’ll respond “Yeah! But it’s not our solution based on HTTP… It’s a Spaghetti Style!”
See you next time with some other little
hints to approach to common problems 🙂
Simone