Articulo de referencia

ODIO

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 ...

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.com

La 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

  • HTML en sí es hipermedia, con el elemento controlando las solicitudes HTTP a los enlaces. [ 3 ] [ 5 ] Htmx introduce extensiones a HTML para permitir que otros elementos, además de y , controlen las solicitudes.<form>...</form><form>...</form><a>...</a>

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.
    • Hydra . Se basa en JSON-LD para agregar la definición de acciones. [ 6 ]
  • 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

  1. M. Kelly (21 de abril de 2024). "Borrador de Internet  : Lenguaje de aplicación de hipertexto JSON" . datatracker.ietf.org .
  2. 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.
  3. 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 .
  4. Thijssen, Joshua (29-10-2016). "¿Qué es HATEOAS y por qué es importante para mi API REST?" . REST CookBook . Recuperado el 05-02-2020 .
  5. Gross, Carson. "HATEOAS" . htmx.org . Esto, a pesar de que ni XML ni JSON eran hipermedia natural de la misma manera que HTML.
  6. "Hydra: API web basadas en hipermedia" . Consultado el 27 de octubre de 2021 .
  7. Siren: una especificación de hipermedia para representar entidades en GitHub
  8. "Collection+JSON - Hypermedia Type" . Consultado el 25/10/2021 .
  9. "API JSON: Última especificación" . Consultado el 25/10/2021 .