usar una sirve servicios saber restful qué que para otro entre ejemplo diferencia cuando como rest

una - ¿Cuál es la ventaja de utilizar REST en lugar de HTTP no REST?



web service rest (14)

Descubrimiento

Cada recurso tiene referencias a otros recursos, ya sea en jerarquía o enlaces, por lo que es fácil navegar por él. Esta es una ventaja para el humano que desarrolla al cliente, evitando que consulte constantemente los documentos y ofrezca sugerencias. También significa que el servidor puede cambiar los nombres de los recursos unilateralmente (siempre que el software del cliente no codifique las URL).

Compatibilidad con otras herramientas

Puede CURLAR su camino en cualquier parte de la API o utilizar el navegador web para navegar por los recursos. Facilita la depuración y la integración de pruebas.

Nombres verbales estandarizados

Le permite especificar acciones sin tener que buscar la redacción correcta. Imagínese si los get y setters de OOP no estaban estandarizados, y algunas personas usaron retrieve y define lugar. Tendría que memorizar el verbo correcto para cada punto de acceso individual. Saber que solo hay un puñado de verbos disponibles contrarresta ese problema.

Estado estandarizado

Si GET un recurso que no existe, puedes estar seguro de obtener un error 404 en una API RESTful. Contraste con una API no RESTful, que puede devolver {error: "Not found"} envuelto en Dios sabe cuántas capas. Si necesita espacio adicional para escribir un mensaje al desarrollador del otro lado, siempre puede usar el cuerpo de la respuesta.

Ejemplo

Imagine dos API con la misma funcionalidad, una siguiente REST y la otra no. Ahora imagine los siguientes clientes para esas API:

Sosegado:

GET /products/1052/reviews POST /products/1052/reviews "5 stars" DELETE /products/1052/reviews/10 GET /products/1052/reviews/10

HTTP:

GET /reviews?product_id=1052 POST /post_review?product_id=1052 "5 stars" POST /remove_review?product_id=1052&review_id=10 GET /reviews?product_id=1052&review=10

Ahora piense en las siguientes preguntas:

  • Si la primera llamada de cada cliente funcionó, ¿qué tan seguro puede estar el resto también funcionará?

  • Hubo una actualización importante de la API que puede o no haber cambiado esos puntos de acceso. ¿Cuánto de los documentos tendrá que volver a leer?

  • ¿Puedes predecir el regreso de la última consulta?

  • Debe editar la reseña publicada (antes de eliminarla). ¿Puedes hacerlo sin consultar los documentos?

Aparentemente, REST es solo un conjunto de convenciones sobre cómo usar HTTP . Me pregunto qué ventaja proporcionan estas convenciones. ¿Alguien sabe?


@Timmmm, sobre tu edición:

GET /timeline_posts // could return the N first posts, with links to fetch the next/previous N posts

Esto reduciría drásticamente el número de llamadas

Y nada le impide diseñar un servidor que acepte parámetros HTTP para indicar los valores de campo que sus clientes deseen ...

Pero esto es un detalle.

Mucho más importante es el hecho de que no mencionó las enormes ventajas del estilo arquitectónico REST (escalabilidad mucho mejor, debido a la apatridia del servidor), mejor disponibilidad, debido a la apatridia del servidor también, uso mucho mejor de los servicios estándar, como el almacenamiento en caché de Por ejemplo, cuando se utiliza un estilo arquitectónico REST, un acoplamiento mucho más bajo entre el cliente y el servidor, debido al uso de una interfaz uniforme, etc., etc.

En cuanto a su comentario

"No todas las acciones se asignan fácilmente a CRUD (crear, leer / recuperar, actualizar, eliminar)".

: un RDBMS utiliza también un enfoque CRUD (SELECT / INSERT / DELETE / UPDATE), y siempre hay una manera de representar y actuar sobre un modelo de datos.

En cuanto a tu oración

"Es posible que ni siquiera estés tratando con recursos de tipo de objeto"

: un diseño RESTful es, por esencia, un diseño simple, pero esto NO significa que su diseño sea simple. Ves la diferencia ? Tendrá que pensar mucho sobre los conceptos que su aplicación representará y manejará, lo que debe hacer, si lo prefiere, para representar esto por medio de los recursos. Pero si lo hace, terminará con un diseño más simple y eficiente.


Almacenamiento en caché

Hay otros beneficios más profundos de REST que giran en torno a la capacidad de evolución mediante el acoplamiento flexible y el hipertexto, pero los mecanismos de almacenamiento en caché son la razón principal por la que debe preocuparse por HTTP RESTful.


El descubrimiento es mucho más fácil en REST. Tenemos documentos WADL (similares a WSDL en servicios web tradicionales) que lo ayudarán a publicitar su servicio en todo el mundo. También puedes usar descubrimientos UDDI. Con HTTP tradicional POST y GET las personas pueden no conocer su solicitud de mensaje y los esquemas de respuesta para llamarlo.


En mi humilde opinión, la mayor ventaja que REST habilita es la de reducir el acoplamiento cliente / servidor. Es mucho más fácil evolucionar una interfaz REST a lo largo del tiempo sin romper clientes existentes.


En pocas palabras, REST significa usar HTTP de la manera en que debe ser.

Eche un vistazo a la disertación de Roy Fielding sobre REST . Creo que cada persona que está haciendo desarrollo web debería leerlo.

Como nota, Roy Fielding es uno de los impulsores clave detrás del protocolo HTTP, también.

Para nombrar algunos de los avances:

  • Sencillo.
  • Puede hacer un buen uso de la memoria caché HTTP y el servidor proxy para ayudarlo a manejar una carga alta.
  • Te ayuda a organizar incluso una aplicación muy compleja en recursos simples.
  • Hace que sea más fácil para los clientes nuevos utilizar su aplicación, incluso si no la ha diseñado específicamente para ellos (probablemente porque no existían cuando creó su aplicación).

En pocas palabras: NINGUNO .

Siéntase libre de votar negativamente, pero sigo pensando que no hay beneficios reales sobre el HTTP que no es REST. Todas las respuestas actuales son inválidas. Argumentos de la respuesta actualmente más votada:

  • Sencillo.
  • Puede hacer un buen uso de la memoria caché HTTP y el servidor proxy para ayudarlo a manejar una carga alta.
  • Te ayuda a organizar incluso una aplicación muy compleja en recursos simples.
  • Hace que sea más fácil para los clientes nuevos utilizar su aplicación, incluso si no la ha diseñado específicamente para ellos (probablemente porque no existían cuando creó su aplicación).

1. Simple

Con REST necesita una capa de comunicación adicional para sus scripts del lado del servidor y del lado del cliente => en realidad es más complicado que el uso de HTTP que no sea REST.

2. Almacenamiento en caché

El almacenamiento en caché puede controlarse mediante encabezados HTTP enviados por el servidor. REST no agrega ninguna característica faltante en no REST.

3. Organización

REST no te ayuda a organizar las cosas. Te obliga a utilizar API compatible con la biblioteca del servidor que estás utilizando. Puede organizar su aplicación de la misma manera (o mejor) cuando utiliza un enfoque que no sea REST. Por ejemplo, vea Model-View-Controller o enrutamiento MVC .

4. Fácil de usar / implementar

No es cierto del todo. Todo depende de qué tan bien organices y documentes tu aplicación. REST no mejorará mágicamente su aplicación.


Está escrito en la tesis de Fielding . Pero si no quieres leer mucho:

  • escalabilidad incrementada (debido a restricciones de sistema sin estado, de caché y de capas)
  • cliente y servidor desacoplados (debido a restricciones de interfaz uniformes y sin estado)
    • clientes reutilizables (el cliente puede usar navegadores REST generales y semántica RDF para decidir qué enlace seguir y cómo mostrar los resultados)
    • clientes sin interrupción (los clientes se rompen solo por los cambios semánticos específicos de la aplicación, porque usan la semántica en lugar de algunos conocimientos específicos de API)

Las cadenas de consulta pueden ser ignoradas por los motores de búsqueda.


No creo que obtengas una buena respuesta a esto, en parte porque nadie realmente está de acuerdo con lo que es REST. La página de wikipedia contiene muchas palabras de moda y pocas explicaciones. La página de discusión vale la pena echarle un vistazo solo para ver cuánta gente no está de acuerdo con esto. Por lo que puedo decir sin embargo, REST significa esto:

En lugar de tener URLs setter y getter nombradas al azar y usar GET para todos los getters y POST para todos los setters, tratamos de que las URL identifiquen recursos, y luego usamos las acciones HTTP GET , POST , PUT y DELETE para hacerles cosas . Entonces, en lugar de

GET /get_article?id=1 POST /delete_article id=1

Tu harías

GET /articles/1/ DELETE /articles/1/

Y luego POST y PUT corresponden a las operaciones "crear" y "actualizar" (pero nadie está de acuerdo en qué dirección).

Creo que los argumentos de almacenamiento en caché son incorrectos, ya que las cadenas de consulta generalmente se almacenan en caché y, además, no es necesario que las uses. Por ejemplo, django hace que algo como esto sea muy fácil, y yo no diría que fue REST:

GET /get_article/1/ POST /delete_article/ id=1

O incluso solo incluya el verbo en la URL:

GET /read/article/1/ POST /delete/article/1/ POST /update/article/1/ POST /create/article/

En ese caso, GET significa algo sin efectos secundarios, y POST significa algo que cambia los datos en el servidor. Creo que esto es quizás un poco más claro y más fácil, especialmente porque se puede evitar todo el asunto PUT -vs- POST . Además, puede agregar más verbos si lo desea, para que no esté artificialmente con lo que HTTP ofrece. Por ejemplo:

POST /hide/article/1/ POST /show/article/1/

(O lo que sea, es difícil pensar en ejemplos hasta que sucedan).

Entonces, en conclusión, solo hay dos ventajas que puedo ver:

  1. Su API web puede ser más limpia y fácil de comprender / descubrir.
  2. Al sincronizar datos con un sitio web, probablemente sea más fácil usar REST porque simplemente puede decir synchronize("/articles/1/") o lo que sea. Esto depende en gran medida de tu código.

Sin embargo, creo que hay algunas desventajas bastante grandes:

  1. No todas las acciones se asignan fácilmente a CRUD (crear, leer / recuperar, actualizar, eliminar). Es posible que ni siquiera tenga que lidiar con recursos de tipo de objeto.
  2. Es un esfuerzo extra para beneficios dudosos.
  3. Confusión en cuanto a qué camino PUT y POST . En inglés significan cosas similares ("Voy a poner / publicar un aviso en la pared").

Por lo tanto, para concluir, diría: a menos que realmente desee realizar un esfuerzo adicional, o si su servicio se corresponde realmente con las operaciones de CRUD, guarde REST para la segunda versión de su API.

Editar

Acabo de encontrar otro problema con REST: no es fácil hacer más de una cosa en una solicitud o especificar qué partes de un objeto compuesto quieres obtener. Esto es especialmente importante en los dispositivos móviles, donde el tiempo de ida y vuelta puede ser significativo y las conexiones no son confiables. Por ejemplo, supongamos que está recibiendo publicaciones en una línea de tiempo de Facebook. La forma REST "pura" sería algo así como

GET /timeline_posts // Returns a list of post IDs. GET /timeline_posts/1/ // Returns a list of message IDs in the post. GET /timeline_posts/2/ GET /timeline_posts/3/ GET /message/10/ GET /message/11/ ....

Lo cual es un poco ridículo. La API de Facebook es bastante buena, así que veamos qué hacen:

De forma predeterminada, la mayoría de las propiedades de objeto se devuelven cuando realiza una consulta. Puede elegir los campos (o conexiones) que desea devolver con el parámetro de consulta "campos". Por ejemplo, esta URL solo devolverá la identificación, el nombre y la imagen de Ben: https://graph.facebook.com/bgolub?fields=id,name,picture

No tengo idea de cómo harías algo así con REST, y si lo hiciste, si seguiría contando como REST. Ciertamente, ignoraría a cualquiera que intente decirte que no deberías hacer eso (especialmente si el motivo es "¡porque no es RESTO")!


Recomiendo echar un vistazo a Ryan Tomayko''s How I Explained REST to My Wife

Edición de terceros

Extracto del enlace waybackmaschine:

¿Qué tal un ejemplo? Eres profesor y quieres administrar estudiantes:

  • en qué clases están,
  • qué grados están obteniendo,
  • contactos de emergencia,
  • información sobre los libros que enseñas, etc.

Si los sistemas están basados ​​en la web, probablemente haya una URL para cada uno de los sustantivos implicados aquí: student, teacher, class, book, room, etc ... Si hubiera una representación legible por máquina para cada URL, sería trivial enganchar nuevas herramientas en el sistema porque toda esa información sería consumible de manera estándar. ... podría construir un sistema en todo el país que pudiera hablar con cada uno de los sistemas escolares individuales para recopilar puntajes de pruebas.

Cada uno de los sistemas obtendría información el uno del otro utilizando un simple HTTP GET. Si un sistema necesita agregar algo a otro sistema, usaría un HTTP POST. Si un sistema desea actualizar algo en otro sistema, utiliza un HTTP PUT. Lo único que queda para averiguar es cómo deberían ser los datos.


Sugeriría que todos, que están buscando una respuesta a esta pregunta, revisen esta "presentación de diapositivas" .

No pude entender qué es REST y por qué es tan genial, sus pros y sus contras, las diferencias con SOAP, pero esta presentación de diapositivas fue tan brillante y fácil de entender, por lo que ahora es mucho más claro para mí que antes.


Una ventaja es que podemos procesar documentos XML de forma no secuencial y separar datos XML de diferentes fuentes como el objeto InputStream, una URL, un nodo DOM ...


  • Darle a cada "recurso" una ID
  • Vincular cosas juntas
  • Use métodos estándar
  • Recursos con representaciones múltiples
  • Comunicarse sin estado

¿Es posible hacer todo solo con POST y GET? Sí, ¿es el mejor enfoque? ¿No porque? porque tenemos métodos de estándares. Si vuelves a pensar, sería posible hacer todo usando GET ... entonces ¿por qué deberíamos molestarnos en usar POST? ¡Por los estándares!

Por ejemplo, hoy, pensando en un modelo de MVC, puede limitar su aplicación para que responda solo a tipos específicos de verbos como POST, GET, PUT y DELETE. Incluso si todo está emulado para POST y GET, ¿no tiene sentido tener verbos diferentes para diferentes acciones?