The very first thing you should look at is the common web browser. It is the standard for a client that embraces HATEOAS (at least to some degree).
This is how Hypermedia works. It's so simple that it's almost painful:
- you point your browser to
http://pigs-are-cool.org/
- the browser loads the HTML page, images, CSS and so on.
- At this point, the application (your browsing experience) is at a specific URI.
- The browser is showing the content of that URI
- you see a link in the application
- you click the link
- the browser follows the link
- at this point, the application is at a different URI
- The browser is showing the content of the new URI
Now for a short explanation of how the two terms relate to the web browsing experience:
- Hypermedia = HTML pages with the embedded links
- Application state = What you're seeing in the browser at any point in time.
So HATEOAS actually describes what happens in a web browser when you go from web page to web page:
HTML pages with embedded links drive what you see in the browser at any point in time
The term HATEOAS is just an abstraction of this browsing experience.
Other examples of RESTful client applications include:
- RSS and Feed readers. They traverse links given to them by users
- Most AtomPub blog clients. They need merely a URI to a services document, and from there they find out where to upload images and blog posts, search and so on.
- Probably Google Gadgets (and similar), but they're merely browsers in a different skin.
- Web crawlers are also RESTful clients, but they're a niche market.
Some characteristics of RESTful client software:
- The client works with with any server, given that it is primed with some URI and the server responds with an expected result (e.g. for an atom blog client, an Atom services document).
- The client knows nothing about how the server designs its URIs other than what it can find out at runtime
- The client knows enough media types and link relations to understand what the server is saying (e.g. Atom or RSS)
- The client uses embedded links to find other resources; some automatically (like
<img src=
) some manually (like <a href=
).
Very often they are driven by a user, and can correctly be termed "user agents", except for, say GoogleBot.