La hipermedia como motor del estado de la aplicación ( HATEOAS ) es una restricción del estilo arquitectónico de software REST que lo distingue de otros estilos arquitectónicos de red . [ 1 ]
Con HATEOAS, un cliente interactúa con una aplicación de red cuyos servidores proporcionan información de forma dinámica mediante 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 básica de la hipermedia.
Por el contrario, en la arquitectura CORBA (Common Object Request Broker Architecture ) , los clientes y los servidores interactúan a través de una interfaz fija compartida mediante documentación o un lenguaje de descripción de interfaz (IDL).
Las restricciones impuestas por HATEOAS desacoplan el cliente y el servidor. Esto permite que la funcionalidad del servidor evolucione de forma independiente.
El término fue acuñado en 2000 por Roy Fielding en su tesis doctoral. [ 2 ]
Ejemplo
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 puedan contener, forman parte de la API. El cliente transita por los estados de la aplicación seleccionando enlaces dentro de una representación o manipulando la representación de otras maneras permitidas por su tipo de medio. De esta forma, la interacción RESTful se basa en la hipermedia, en lugar de información externa. [ 3 ]
Por ejemplo, esta solicitud GET obtiene un recurso de cuenta, solicitando detalles en una representación JSON: [ 4 ]
GET /accounts/12345 HTTP / 1.1 Host : bank.example.comLa respuesta es:
HTTP / 1.1 200 OK { "cuenta": { "número_de_cuenta": 12345, "balance": { "moneda": "USD", "valor": 100.00 }, "links": { "depósitos": "/cuentas/12345/depósitos", "retiros": "/cuentas/12345/retiros", "transferencias": "/cuentas/12345/transferencias", "close-requests": "/accounts/12345/close-requests" } } } La respuesta contiene estos posibles enlaces de seguimiento: POST un depósito, retiro, transferencia o solicitud de cierre (para cerrar la cuenta).
Por ejemplo, más adelante, después de que la cuenta haya quedado en descubierto, habrá un conjunto diferente de enlaces disponibles, debido a que la cuenta está en descubierto.
HTTP / 1.1 200 OK { "cuenta": { "número_de_cuenta": 12345, "balance": { "moneda": "USD", "valor": -25.00 }, "links": { "depósitos": "/cuentas/12345/depósitos" } } } Ahora solo está disponible un enlace: para depositar más dinero (mediante POST a depósitos). En su estado actual , los demás enlaces no están disponibles. De ahí el término Motor de Estado de la Aplicación . Las acciones posibles varían según 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 puede adquirirse en tiempo de ejecución mediante " código bajo demanda " proporcionado al cliente por el servidor. [ 2 ]
Orígenes
La restricción HATEOAS es una parte esencial de la característica de " interfaz uniforme " de REST, tal como se define en la tesis doctoral de Roy Fielding . [ 2 ] Fielding ha descrito con más detalle el concepto en su blog. [ 3 ]
Fielding explica que el propósito de la rigidez de esta y otras restricciones REST es el «diseño de software a escala de décadas: cada detalle busca promover la longevidad del software y su evolución independiente. Muchas de las restricciones se oponen directamente a la eficiencia a corto plazo. Desafortunadamente, las personas suelen ser bastante buenas en el diseño a corto plazo, pero generalmente pésimas en el diseño a largo plazo». [ 3 ]
Implementaciones
Hipertexto
JSON/XML
- HAL , hipermedia construida sobre JSON o XML . Define enlaces, pero no acciones (solicitudes HTTP).
- JSON-LD , estándar para hipervínculos en JSON. No aborda las acciones.
- Siren , hipermedia construida sobre JSON. Define enlaces y acciones. [ 7 ]
- Colección+JSON , hipermedia construida sobre JSON. Define enlaces y acciones. [ 8 ]
- JSON:API , define enlaces y acciones. [ 9 ]
Véase también
Referencias
- ↑ M. Kelly (21 de abril de 2024). "Borrador de Internet : Lenguaje de aplicación de hipertexto JSON" . datatracker.ietf.org .
- 1 2 3 Fielding, Roy Thomas (2000). "Rizwan.Ali 03014821766 Transferencia de estado (REST)" . Estilos arquitectónicos y diseño de arquitecturas de software basadas en redes (PhD). Universidad de California, Irvine . pág. 82. ISBN 0599871180.
- 1 2 3 4 Fielding, Roy T. (20 de octubre de 2008). "Las API REST deben estar basadas en hipertexto" . Recuperado el 20 de mayo de 2010 .
- ↑ Thijssen, Joshua (29-10-2016). "¿Qué es HATEOAS y por qué es importante para mi API REST?" . REST CookBook . Recuperado el 05-02-2020 .
- ↑ Gross, Carson. "HATEOAS" . htmx.org .
Esto, a pesar de que ni XML ni JSON eran hipermedia natural de la misma manera que HTML.
- ↑ "Hydra: API web basadas en hipermedia" . Consultado el 27 de octubre de 2021 .
- ↑ Siren: una especificación de hipermedia para representar entidades en GitHub
- ↑ "Collection+JSON - Hypermedia Type" . Consultado el 25/10/2021 .
- ↑ "API JSON: Última especificación" . Consultado el 25/10/2021 .
- computación distribuida
- Hipermedia
- Neologismos de la Web 2.0