example - spring rest baeldung
Implementación de clientes REST ¿Abrazando la restricción de HATEOAS? (6)
¿Alguien sabe de una implementación de un cliente REST que abarque la restricción de Hypermedia como el Motor del Estado de la Aplicación (HATEOAS)?
La API de Sun Cloud parece ser un buen candidato, a juzgar por la forma en que está documentado y una declaración del autor en el sentido de que las implementaciones de Ruby, Java y Python estaban en proceso. Pero hasta ahora no he encontrado rastro del código.
Estoy buscando cualquier cosa, incluso una implementación parcial sería útil.
El principio de diseño de HATEOAS (REST también es un conjunto de principios de diseño) significa que cada recurso debe tener, como máximo, una única URL fija.
Todo lo demás relacionado debe ser visible dinámicamente desde esa URL a través de enlaces "hipermedia".
Acabo de empezar un trozo de wikipedia here
El problema con REST HTTP y HATEOAS es que no existe un enfoque común para especificar enlaces, por lo que es difícil seguir los enlaces, ya que su estructura puede cambiar de un proveedor de servicios a otro. Algunos usarían <link href="..." />
otros usarían una estructura propietaria para enlaces ex. <book href="..." />
. No es como en HTML o atom donde el enlace es parte de un estándar definido.
Un cliente no puede saber qué es un enlace en su representación si no conoce su tipo de medios a menos que haya una representación estándar o convencional de un enlace.
Lo primero que debes mirar es el navegador web común. Es el estándar para un cliente que abarca HATEOAS (al menos hasta cierto punto).
Así es como funciona la hipermedia. Es tan simple que es casi doloroso:
- apuntas tu navegador a
http://pigs-are-cool.org/
- El navegador carga la página HTML, imágenes, CSS, etc.
- En este punto, la aplicación (su experiencia de navegación) se encuentra en un URI específico.
- El navegador muestra el contenido de esa URI.
- ves un enlace en la aplicación
- haces clic en el enlace
- El navegador sigue el enlace.
- En este punto, la aplicación está en un URI diferente
- El navegador muestra el contenido del nuevo URI.
Ahora, para una breve explicación de cómo se relacionan los dos términos con la experiencia de navegación web:
- Hypermedia = páginas HTML con los enlaces incrustados.
- Estado de la aplicación = lo que está viendo en el navegador en cualquier momento.
Así que HATEOAS en realidad describe lo que sucede en un navegador web cuando pasas de una página web a otra:
Las páginas HTML con enlaces incrustados controlan lo que ve en el navegador en cualquier momento
El término HATEOAS es solo una abstracción de esta experiencia de navegación.
Otros ejemplos de aplicaciones cliente RESTful incluyen:
- Lectores RSS y Feed. Recorren los enlaces que les dan los usuarios.
- La mayoría de los clientes del blog AtomPub. Necesitan simplemente un URI para un documento de servicios, y desde allí descubren dónde subir imágenes y publicaciones de blogs, buscar, etc.
- Probablemente los Gadgets de Google (y similares), pero son simplemente navegadores en una máscara diferente.
- Los rastreadores web también son clientes REST, pero son un nicho de mercado.
Algunas características del software cliente RESTful:
- El cliente trabaja con cualquier servidor, dado que está cebado con algún URI y el servidor responde con un resultado esperado (por ejemplo, para un cliente de blog Atom, un documento de servicios Atom).
- El cliente no sabe nada sobre cómo el servidor diseña sus URI, aparte de lo que puede averiguar en tiempo de ejecución
- El cliente conoce suficientes tipos de medios y relaciones de enlace para entender lo que dice el servidor (por ejemplo, Atom o RSS)
- El cliente utiliza enlaces incrustados para encontrar otros recursos; algunos automáticamente (como
<img src=
) algunos manualmente (como<a href=
).
Muy a menudo son impulsados por un usuario y pueden denominarse correctamente "agentes de usuario", a excepción de, por ejemplo, GoogleBot.
RestTemplate de Spring Framework puede usarse para lograr el propósito. Revisa este article para más detalles.
Rico,
Estoy trabajando en un marco del lado del cliente RESTful para Jersey en este momento. Una vez que el diseño inicial se estabilice un poco, se agregará a la base del código de Jersey y, luego de pasar por la comunidad para su revisión, debería eventualmente tomar la forma del marco del lado del cliente de JAX-RS.
Ha habido una animada discusión en la lista de usuarios de Jersey recientemente sobre todas las cosas RESTful. https://jersey.dev.java.net/servlets/SummarizeList?listName=users
A partir de ahora, deben pasar unas dos semanas para que el código se haga público la primera vez que las personas experimenten.
ene
Restfulie es un marco de Ruby, Java y C # que apunta a permitir la creación de clientes y servidores que emplean HATEOAS. No lo he usado, pero se ve interesante.
Aquí hay un código de ejemplo de su proyecto java :
Order order = new Order();
// place the order
order = service("http://www.caelum.com.br/order").post(order);
// cancels it
resource(order).getTransition("cancel").execute();
Nuevamente, no estoy seguro de qué es exactamente lo que hace esto, o qué tan bien funciona en la práctica, pero parece intrigante.