No entiendo el beneficio de HATEOAS para las API destinadas a ser utilizadas por programas (a diferencia de los humanos que navegan directamente por su API). Claro, el cliente no está vinculado a un esquema de URL, pero sí a un esquema de datos que es lo mismo en mi mente.
Por ejemplo, suponga que quiero ver un artículo en un pedido, supongamos que descubrí o conozco la URL del pedido.
HATEOAS
order = get(orderURL);
item = get(order.itemURL[5]);
no HATEOAS:
order = get(orderURL);
item = get(getItemURL(order,5));
En el primer modelo tengo que saber el hecho de que el objeto de orden tiene un campo itemURL. En el segundo modelo, tengo que saber cómo construir una URL de elemento. En ambos casos tengo que "saber" algo antes de tiempo, entonces, ¿qué está haciendo realmente HATEOAS por mí?
web-development
rest
Paso
fuente
fuente
get(orderURL);
debería estar diciendothe fact that the order object has an itemURL field
.Respuestas:
Una diferencia es que el esquema es un estándar, o al menos puede ser reutilizado por otros.
Por ejemplo, supongamos que está utilizando la API de Twitter y también desea admitir StatusNet (o en su lugar). Como usan el mismo modelo de datos que Twitter, si la API sigue a HATEOAS, ahora solo tiene que cambiar la URL principal. Si no es así, ahora debe cambiar cada URL del código.
Por supuesto, si necesita cambiar el código para poner la URL del punto de entrada del servicio de todos modos, puede no parecerle tan útil. Realmente brilla si esa URL se inserta dinámicamente; por ejemplo, si estuviera creando un servicio como Twillio, que interactuaría con la propia API del usuario.
fuente
API explorable: puede sonar trivial pero no subestime el poder de una API explorable. La capacidad de navegar alrededor de los datos hace que sea mucho más fácil para los desarrolladores del cliente construir un modelo mental de la API y sus estructuras de datos.
Documentación en línea: el uso de URL como relaciones de enlace puede dirigir a los desarrolladores del cliente a la documentación.
Lógica de cliente simple: un cliente que simplemente sigue las URL en lugar de construirlas por sí mismo, debería ser más fácil de implementar y mantener.
El servidor toma posesión de las estructuras de URL: el uso de hipermedia elimina el conocimiento codificado por el cliente de las estructuras de URL utilizadas por el servidor.
Descarga de contenido a otros servicios: Hypermedia es necesario cuando se descarga contenido a otros servidores (un CDN por ejemplo).
Control de versiones con enlaces: Hypermedia ayuda al control de versiones de las API.
Implementaciones múltiples del mismo servicio: Hypermedia es una necesidad cuando existen implementaciones múltiples del mismo servicio (y un cliente necesita acceder a más de uno de ellos).
Puede encontrar una explicación detallada de estos puntos aquí: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html
fuente