Hypermedia as the Engine of Application State (HATEOAS) is a constraint of the
REST application architecture that distinguishes it from other network
application architectures.
With HATEOAS, a client interacts with a network application whose application servers provide information dynamically through
hypermedia. A REST client needs little to no prior knowledge about how to interact with an application or server beyond a generic understanding of hypermedia.
By contrast, clients and servers in
Common Object Request Broker Architecture (CORBA) interact through a fixed
interface shared through documentation or an
interface description language (IDL).
The restrictions imposed by HATEOAS decouple client and server. This enables server functionality to evolve independently.
Example
A user-agent that implements HTTP makes an HTTP request of a REST API through a simple
URL
A Uniform Resource Locator (URL), colloquially termed as a web address, is a reference to a web resource that specifies its location on a computer network and a mechanism for retrieving it. A URL is a specific type of Uniform Resource Identifie ...
. All subsequent requests the user-agent may make are discovered inside the responses to each request. The
media types used for these representations, and the
link relations they may contain, are standardized. The client transitions through application states by selecting from the links within a representation or by manipulating the representation in other ways afforded by its media type. In this way, RESTful interaction is driven by hypermedia, rather than out-of-band information.
For example, this GET request fetches an account resource, requesting details in a JSON representation:
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
The response is:
HTTP/1.1 200 OK
The response contains these possible follow-up links: POST a deposit, withdrawal, transfer, or close request (to close the account).
As an example, later, after the account has been overdrawn, there is a different set of available links, because the account is overdrawn.
HTTP/1.1 200 OK
Now only one link is available: to deposit more money (by POSTing to deposits). In its current ''state'', the other links are not available. Hence the term ''Engine of Application State''. What actions are possible varies as the state of the resource varies.
A client does not need to understand every media type and communication mechanism offered by the server. The ability to understand new media types can be acquired at run-time through "
code-on-demand" provided to the client by the server.
Origins
The HATEOAS constraint is an essential part of the "uniform interface" feature of REST, as defined in
Roy Fielding's doctoral dissertation.
Fielding has further described the concept on his blog.
The purpose of some of the strictness of this and other REST constraints, Fielding explains, is "software design on the scale of decades: every detail is intended to promote software longevity and independent evolution. Many of the constraints are directly opposed to short-term efficiency. Unfortunately, people are fairly good at short-term design, and usually awful at long-term design".
Implementations
*
HAL
HAL may refer to:
Aviation
* Halali Airport (IATA airport code: HAL) Halali, Oshikoto, Namibia
* Hawaiian Airlines (ICAO airline code: HAL)
* HAL Airport, Bangalore, India
* Hindustan Aeronautics Limited an Indian aerospace manufacturer of fight ...
*
JSON-LD
*
Siren
*
Collection+JSON
Collection or Collections may refer to:
* Cash collection, the function of an accounts receivable department
* Collection (church), money donated by the congregation during a church service
* Collection agency, agency to collect cash
* Collectio ...
*
JSON:API
*
Hydra
Hydra generally refers to:
* Lernaean Hydra, a many-headed serpent in Greek mythology
* ''Hydra'' (genus), a genus of simple freshwater animals belonging to the phylum Cnidaria
Hydra or The Hydra may also refer to:
Astronomy
* Hydra (constel ...
See also
*
Hypertext Application Language
*
Universal Description Discovery and Integration is the equivalent for the
Web Services Description Language
References
{{reflist
Distributed computing
Hypermedia