El hipermedia como motor del estado de la aplicación ( HATEOAS ) es una restricción del estilo arquitectónico del software REST que lo distingue de otros estilos arquitectónicos de red .
Con HATEOAS, un cliente interactúa con una aplicación de red cuyos servidores de aplicaciones proporcionan información dinámicamente a través de hipermedia . Un cliente REST necesita poco o ningún conocimiento previo sobre cómo interactuar con una aplicación o servidor más allá de una comprensión genérica de hipermedia.
Por el contrario, los clientes y servidores en Common Object Request Broker Architecture (CORBA) interactúan a través de una interfaz fija compartida a través de documentación o un lenguaje de descripción de interfaz (IDL).
Las restricciones impuestas por HATEOAS desacoplan al cliente y al servidor. Esto permite que la funcionalidad del servidor evolucione de forma independiente.
El término fue acuñado en el año 2000 por Roy Fielding en su tesis doctoral. [1]
Un agente de usuario realiza una solicitud HTTP a una API REST a través de una URL de punto de entrada . Todas las solicitudes posteriores que el agente de usuario pueda realizar se descubren dentro de la respuesta a cada solicitud. Los tipos de medios utilizados para estas representaciones y las relaciones de enlace que pueden contener son parte de la API. El cliente realiza la transición a través de los estados de la aplicación seleccionando entre los enlaces dentro de una representación o manipulando la representación de otras maneras que le permita su tipo de medio. De esta manera, la interacción RESTful está impulsada por hipermedia, en lugar de información fuera de banda. [2]
Por ejemplo, esta solicitud GET recupera un recurso de cuenta y solicita detalles en una representación JSON: [3]
OBTENER /accounts/12345 HTTP / 1.1 Host : banco.ejemplo.com
La respuesta es:
HTTP / 1.1 200 OK{ "cuenta": { "número_cuenta": 12345, "balance": { "Moneda: USD", "valor": 100,00 }, "Enlaces": { "depósitos": "/cuentas/12345/depósitos", "retiros": "/cuentas/12345/retiros", "transferencias": "/cuentas/12345/transferencias", "solicitudes de cierre": "/accounts/12345/solicitudes de cierre" } }}
La respuesta contiene estos posibles enlaces de seguimiento: PUBLICAR un depósito, retiro, transferencia o solicitud de cierre (para cerrar la cuenta).
Por ejemplo, más tarde, después de que la cuenta se haya sobregirado, hay un conjunto diferente de enlaces disponibles, porque la cuenta está sobregirada.
HTTP / 1.1 200 OK{ "cuenta": { "número_cuenta": 12345, "balance": { "Moneda: USD", "valor": -25,00 }, "Enlaces": { "depósitos": "/cuentas/12345/depósitos" } }}
Ahora solo hay un enlace disponible: depositar más dinero (publicando en depósitos). En su estado actual , los demás enlaces no están disponibles. De ahí el término motor de estado de aplicación . Las acciones posibles varían a medida que varía el estado del recurso.
Un cliente no necesita comprender todos los tipos de medios y mecanismos de comunicación que ofrece el servidor. La capacidad de comprender nuevos tipos de medios se puede adquirir en tiempo de ejecución a través del " código bajo demanda " proporcionado al cliente por el servidor. [1]
La restricción HATEOAS es una parte esencial de la característica de "interfaz uniforme" de REST, como se define en la tesis doctoral de Roy Fielding . [1] Fielding ha descrito con más detalle el concepto en su blog. [2]
El propósito de parte del rigor de ésta y otras restricciones REST, explica Fielding, es "el diseño de software a escala de décadas: cada detalle tiene como objetivo promover la longevidad del software y la evolución independiente. Muchas de las restricciones se oponen directamente a las limitaciones a corto plazo". Desafortunadamente, la gente es bastante buena en el diseño a corto plazo y, por lo general, pésima en el diseño a largo plazo". [2]
<form>...</form>
elemento controla las solicitudes HTTP a los enlaces. [2] [4]Esto, a pesar de que ni XML ni JSON eran un hipermedia natural de la misma manera que HTML.