2009-04-04 6 views
7

Este parece ser el principio de REST que he tenido el tiempo más difícil para entender. Entiendo que cuando designe un api de descanso la mayor parte del esfuerzo debería entrar en el diseño/descripción de hipertexto para la aplicación. ¿Alguna sugerencia para aplicaciones del mundo real de este principio? ¿Cómo aplica el protocolo átomo este principio? ¿Puede alguien explicar eso en términos simples cómo se aplicaría eso a una hipotética API de reposo de compras?¿Alguien puede explicar "Hipertexto como motor del estado de la aplicación" en términos simples

Respuesta

5

Considérese a sí mismo navegando en un sitio web normal. Cuando lo visita, lee los contenidos de las páginas y, según lo que ha leído y lo que quiere hacer, sigue varios enlaces en la página. Ese es realmente el núcleo de lo que "el hipertexto como motor del estado de la aplicación" se reduce a. En este ejemplo, el estado de la aplicación es el estado en su cabeza y la página en la que se encuentra. En función de eso, recorre más enlaces, lo que altera el estado de la aplicación en su cabeza.

Hay otro elemento en ello, la mente: la otra cara es que no debería necesitar adivinar esos URI: debería haber suficiente contexto en la página para inferir los URI (como la información que la aplicación tener del tipo de contenido, y cosas como la plantilla URI), o los URI a seguir deben estar presentes. Más allá de eso, una aplicación HTTP RESTful no debería preocuparse por la estructura de los URI.

ACTUALIZACIÓN: Para ampliar las cosas, los formularios HTML también demuestran HATEOAS. Las formas que usan GET son análogas al uso de plantillas URI. Y HATEOS no se limita a atravesar enlaces utilizando HTTP GET: formularios que usan POST (o algún otro método, si el navegador simplemente lo admite) puede describirse como una representación para enviar al servidor.

+0

Ok, basándote en lo que dices, los esquemas de plantilla de URL son malos y la aplicación debería proporcionar las siguientes opciones a través de esquemas como . ¿Cómo dice un medio de carrito de compras (por ejemplo, xml) a continuación, puede pagar con su tarjeta de crédito. ¿Algún ejemplo a ese efecto? Gracias por la respuesta. – Surya

+0

Los esquemas de plantilla URI son malos si la aplicación necesita tener conocimiento previo de ellos, es decir, si están codificados en la aplicación cliente. OpenSearch es un buen ejemplo de cómo usar las plantillas de URI correctamente. Pero si el cliente está obsesionado con los URI mirando de cierta manera, eso no es REST. –

+0

No, si el cliente está usando plantillas de URI que adquirió del servidor, esa es una historia diferente, de ahí mi ejemplo de OpenSearch. El servidor le está diciendo al cliente cómo construir URIs en lugar de hacerlo en función del conocimiento fuera de banda a priori. –

0

Este artículo proporciona algunas muestras en el contexto de Flickr.

Hypermedia in RESTful applications

+0

Flickr no es RESTful. Están mintiendo. Fielding, el creador de REST, dice que Flickr no tiene idea de lo que están haciendo. – aehlke

0

Otra forma de ver este concepto es que el estado está representado por la página actual y los enlaces incrustados en ella. Atravesar un enlace cambia el estado de la aplicación que se representa en la página siguiente. Es un poco difícil de explicar ... los enlaces que están disponibles en cualquier momento definen qué acciones están disponibles en función de las acciones que ya se han producido. Esta es una definición de "estado actual".

El truco es representar las acciones disponibles que son URI que "actúan" en un recurso. La recuperación de la representación asociada con un URI lleva a cabo implícitamente la acción y recupera la representación resultante. Los URI están integrados en la representación y el usuario entiende la acción asociada con un URI específico. Los diversos métodos HTTP ayudan a definir las "acciones" que ocurren y especifica cuándo no se permite ninguna acción. Esto es a lo que la gente suele llegar cuando describe el paradigma RESTful completo.

+2

No creo que esto sea bastante exacto. En, por ejemplo, HTTP, las únicas "acciones" que puede hacer son GET, POST, PUT y DELETE. En REST, no está representando acciones disponibles como URI, está exponiendo recursos a través de URI y permitiendo a las personas GET, POST, PUT y ELIMINARlas. –

+1

El uso correcto de los verbos HTTP no es REST. Simplemente usa HTTP correctamente. – aehlke

12

Cuando intento explicar hypermedia, me gusta usar el ejemplo de navegar en un automóvil a través de señales frente a un mapa. Me doy cuenta de que no responde directamente a tu pregunta, pero puede ser útil.

Cuando conduce un automóvil y llega a una intersección en particular, se le proporcionan señales para indicar a dónde puede ir desde ese punto. Del mismo modo, hypermedia le proporciona un conjunto de opciones basadas en su estado actual.

Una API tradicional basada en RPC es más como un mapa. Con un mapa, usted tiende a planificar su ruta en función de un conjunto estático de datos de carreteras. Un problema con los mapas es que pueden quedar desactualizados y no proporcionan información sobre el tráfico u otros factores dinámicos.

La ventaja de los postes indicadores es que se pueden cambiar sobre la marcha para desviar el tráfico debido a la construcción o para controlar el flujo de tráfico.

No estoy sugiriendo que las señales sean siempre una mejor opción que un mapa. Obviamente, hay pros y contras, pero es valioso conocer ambas opciones. Es lo mismo con hypermedia. Es una alternativa valiosa a la interfaz RPC tradicional.

+0

Exactamente. Creo que debería haberlo deletreado. –

+0

Una pequeña aclaración: "un conjunto de opciones basadas en su estado actual" probablemente debería ser "un conjunto de opciones basadas en el estado del recurso", ya que se supone que el cliente no tiene estado. Con su analogía, su ubicación actual es el recurso. –

Cuestiones relacionadas