¿Cuál es la diferencia entre REST y RESTful?

540

¿Cuál es la diferencia entre un sistema REST y un sistema que es RESTful?

De algunas cosas que he leído, la mayoría de los llamados servicios REST son en realidad servicios RESTful. Entonces, ¿cuál es la diferencia entre los dos?

AwkwardCoder
fuente
3
La razón de la pregunta es porque si lee el artículo en el enlace y busca lo que el Dr. Fielding piensa sobre la mayoría de las implementaciones REST, no son sistemas REST en absoluto. Exhiben un comportamiento RESTful pero no pueden clasificarse como sistemas REST.
AwkwardCoder
44
Leí el artículo, pero no creo que lo haya llevado a distinciones semánticamente inútiles.
JasonTrue
3
Artículo de Wikipedia sobre REST - en.wikipedia.org/wiki/Representational_State_Transfer - segundo párrafo - "El cumplimiento de las restricciones REST a menudo se conoce como 'RESTful'".
Nate
1
@PramodNikumbh ha respondido correctamente a continuación. Un sistema "REST" es un sistema que se ajusta a una definición más amplia de REST. Exhibe al menos algunos principios de descanso. "Restful" describe un sistema mucho más compatible con REST.
Andrew Norman el
Bueno, creo que hay una confusión en el nombre, el "ful" en RESTful confundirá apátridas y con estado y esas son dos cosas diferentes, REST y RESTful en mi opinión personal, tienen que ser INALÁMBRICAS. imagine un REST con estado llamado RESTles. :)
Waheed

Respuestas:

487

La transferencia de estado representativo (REST) es un estilo de arquitectura de software. Como se describe en una disertación de Roy Fielding, REST es un "estilo arquitectónico" que básicamente explota la tecnología y los protocolos existentes de la Web.

RESTful se usa generalmente para referirse a los servicios web que implementan dicha arquitectura.

Justin Ethier
fuente
146
Entonces, ¿REST es la arquitectura y RESTful un adjetivo?
manei_cc
44
@manei_cc: Aunque en la práctica lo que encontrará son servicios llamados RESTful que no siguen la arquitectura REST y son básicamente similares a REST, wannabies REST, etc. Así que siempre preste atención a que un "servicio RESTful" no se construya necesariamente usando REST arquitectura, pero cierto como escribió Justin Ethier: explota la tecnología y los protocolos existentes de la Web .
Azder
77
RESTful debe usarse para API que realmente respetan REST. Vi demasiados servicios web "REST" que solo usaban GET o POST. RESTful acentúa el uso completo de los verbos HTTP y las convenciones de nomenclatura de URL. Pero es mi punto de vista.
Martin
1
architect¿de que? de urls? como https://translation.googleapis.com/language/translate/v2este es el estilo REST?
Asif Mushtaq
1
stackoverflow.com/users/3807248/pramod-nikumbh ha respondido correctamente a continuación
Andrew Norman
194

Servicios basados ​​en REST / Arquitectura vs. Servicios RESTFUL / Arquitectura

Para diferenciar o comparar estos 2, debe saber qué es REST .

REST ( RE presentational S tate T ransfer) es básicamente un estilo arquitectónico de desarrollo que tiene algunos principios:

  • Debe ser apátrida

  • Debe acceder a todos los recursos del servidor utilizando solo URI

  • No tiene cifrado incorporado

  • No tiene sesión

  • Utiliza uno y solo un protocolo: HTTP

  • Para realizar un mantenimiento, se debe utilizar HTTP verbos tales como get, post, putydelete

  • Debería devolver el resultado solo en forma de JSON o XML, átomo, OData, etc. (datos livianos)

REST based services seguir algunos de los principios anteriores y no todos

RESTFUL services significa que sigue todos los principios anteriores.

Es similar al concepto de:

Object-based languagesadmite todos los conceptos de OOP, ejemplos : C ++, C #

Object oriented languagesadmite algunas de las características de OOP, ejemplos : JavaScript, VB


Ejemplo :

ASP Dot NET MVC 4 es REST-Basedmientras que Microsoft WEB API es RESTFul.

MVC solo admite algunos de los principios REST anteriores, mientras que WEB API admite todos los Principios REST anteriores.

MVC solo admite lo siguiente de la API REST

  • Podemos acceder al recurso usando URI

  • Admite el verbo HTTP para acceder al recurso desde el servidor

  • Puede devolver los resultados en forma de JSON, XML, que es HTTPResponse.

Sin embargo, al mismo tiempo en MVC

  • Podemos usar la sesión

  • Podemos hacerlo con estado

  • Podemos devolver video o imagen desde el método de acción del controlador que básicamente viola los principios REST

Es por eso que MVC es REST-Basedmientras que WEB API admite todos los principios anteriores y es RESTFul.

Pramod Nikumbh
fuente
10
No entiendo por qué se ha rechazado esto, esta respuesta trae mucha información aclaratoria a la pregunta.
Marcovecchio
55
mejor respuesta hasta ahora
Limon
2
Esta es la mejor respuesta.
Mário Meyrelles
2
puedes usar FTP con REST. consulte: stackoverflow.com/questions/35534812/…
crazyTech
77
Los idiomas de las categorías "Basadas en objetos" y "Orientado a objetos" anteriores se invierten. Los lenguajes orientados a objetos siguen todos los principios OOPS, mientras que los basados ​​en objetos siguen algunos.
Mrchief
119

"REST" es un paradigma arquitectónico. "RESTful" describe el uso de ese paradigma.

Un solo tiro
fuente
architect¿de que? de urls? como https://translation.googleapis.com/language/translate/v2este es el estilo REST?
Asif Mushtaq
2
Una arquitectura REST requiere muchos rasgos. No puede decir que algo se adhiere a los principios REST simplemente mostrando una URL.
SingleShot
42

Como Jason dijo en los comentarios, RESTful solo se usa como un adjetivo que describe algo que respeta las restricciones REST.

Darrel Miller
fuente
29

REST significa transferencia de estado representacional. Eso significa que el estado en sí no se transfiere, sino una mera representación del mismo. El ejemplo más común es una aplicación basada en un servidor HTML puro (sin javascript). El navegador no sabe nada sobre la aplicación en sí, pero a través de enlaces y recursos, el servidor puede transferir el estado de la aplicación al navegador. Cuando un botón normalmente cambiaría una variable de estado (por ejemplo, página abierta) en una aplicación de Windows normal, en el navegador tiene un enlace que representa dicho cambio de estado.

La idea es usar hipermedia. Y quizás para crear nuevos tipos de hipermedia. Potencialmente podemos expandir el navegador con javascript / AJAX y crear nuevos tipos de hipermedia personalizados. Y tendríamos una verdadera aplicación REST.

Esta es mi versión corta de lo que significa REST, el problema es que es difícil de implementar. Personalmente digo RESTful, cuando quiero hacer referencia a los principios REST pero sé que realmente no estoy implementando todo el concepto de REST. Realmente no decimos SOAPful porque usas SOAP o no. Creo que la mayoría de la gente no hace REST de la forma en que fue concebido por su creador Roy Fielding, en realidad implementamos arquitecturas RESTful o RESTlike. Puede ver su disertación , y encontrará el acrónimo REST pero no la palabra RESTful.

Arturo Hernández
fuente
13

Gracias por las respuestas. Lea este artículo de Alex Rodríguez que sugiere que un servicio web RESTful tiene 4 características básicas que son:

  1. Use métodos HTTP explícitamente.
  2. Sé apátrida.
  3. Exponer URI de estructura de directorio.
  4. Transfiera XML, notación de objetos JavaScript (JSON) o ambos.
Kumait
fuente
En realidad tiene 6 restricciones.
IronBlossom
2
@IronBlossom Care para actualizar la respuesta con los dos que faltan?
Paul Fleming
1
enlace inactivo, la nueva URL parece ser IBM - Servicios web RESTful
dthal
10

Representational State Transfer (REST) ​​es un estilo de arquitectura de software para sistemas hipermedia distribuidos como la World Wide Web. El término Transferencia de Estado Representacional fue introducido y definido en 2000 por Roy Fielding 1 [2] en su disertación doctoral. Fielding es uno de los autores principales de las versiones 1.0 y 1.1 de la especificación del Protocolo de transferencia de hipertexto (HTTP). El cumplimiento de las restricciones REST se conoce como 'RESTful'. Fuente: Wikipedia

Andersson Melo
fuente
8

Los servicios web son esencialmente sitios web cuyo contenido es consumido por programas informáticos, no por personas. REST es un conjunto de principios arquitectónicos que estipulan que los servicios web deben aprovechar al máximo HTTP y otros estándares web, para que los programas obtengan todo lo bueno que las personas ya pueden sacar de la web. REST a menudo se contrasta con los servicios web SOAP y otros servicios web orientados a "llamada a procedimiento remoto".

Las presentaciones de Stefan Tilkov sobre REST en Parleys.com son bastante buenas, especialmente esta .

Para un libro, no hay nada mejor que Richardson y Ruby's Restful Web Services .

Jim Ferrans
fuente
¿Entonces un sitio web normal puede considerarse una aplicación REST?
yoyo_fun
1
@yoyo_fun: Sí, un sitio web normal también se puede construir RESTfully. En algún nivel de abstracción, si el servidor devuelve HTML a un humano o JSON (por ejemplo) a un programa es irrelevante.
Jim Ferrans
5

Un servicio basado en REST se denomina "servicio RESTful".

Fuente Confío en publicar eso: Dr.Dobbs Archive

nickolay
fuente
4

Hay 4 niveles de API definidos en el modelo de madurez de Richardson. Estos se definen como:

  • Nivel 0: cualquier sistema que tenga un único punto final para todas sus API (SOAP o RPC entran en esta categoría). Las API de nivel 0 también pueden parecerse a "comandos".

  • nivel 1: un sistema descrito por ResourceUri. Este es un sistema que define múltiples URI basados ​​en entidades (en lugar de tener un único punto final como lo harían los sistemas de nivel 0). Estos URI pueden usar diferentes acciones http (POST, GET, PUT, etc.) para implementar diferentes acciones contra ese recurso.

  • nivel 2: también conocido como nivel 1 con un uso compatible de métodos / verbos HTTP estándar y respuestas de código de estado múltiple

  • nivel 3: también conocido como nivel 2 más HATEOAS (hipermedia incluido en la respuesta que describe las llamadas adicionales que puede hacer)

Si bien los niveles 1, nivel 2 y nivel 3 pueden considerarse como sistemas REST, solo los niveles más estrictos (también conocidos como nivel 2 y nivel 3) se consideran RESTful.

Entonces, esencialmente todas las API RESTful son REST, pero no todas las API REST son RESTful

definición del modelo de madurez de Richardson

Andrew Norman
fuente
2

Piense en REST como una "clase" arquitectónica, mientras que RESTful es la conocida "instancia" de esa clase.

Por favor, tenga en cuenta el ""; No estamos tratando con objetos de programación "reales" aquí.

Palmadita
fuente
1

Un "servicio REST" y un "servicio RESTful" son lo mismo.

Un sistema RESTful es cualquier sistema que sigue las convenciones REST definidas en el documento original que creó la idea de las aplicaciones RESTful en red .

Vale la pena señalar que hay varios niveles de RESTfulness. En general, REST es un estilo, no un estándar, por lo que hay espacio para la interpretación basada en las necesidades. un ejemplo son las URL de recursos jerárquicos (p /things/ID/relatedthings. ej. ) frente a las URL planas (p. ej. /things/IDy /relatedthings?thing=ID)

Brenden
fuente
1

REST (REpresentation State Transfer) es una arquitectura que utiliza los servicios web que se crean.

y

RESTful es una forma de escribir servicios utilizando las arquitecturas REST. Los servicios RESTful exponen los recursos para identificar los objetivos para interactuar con los clientes.

Manas
fuente
0

REST es un patrón arquitectónico para crear servicios web. Un servicio RESTful es aquel que implementa ese patrón.

sajadre
fuente