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

Resuelto Dimitri C. asked hace 14 años • 13 respuestas

Después de leer mucho sobre las diferencias entre REST y SOAP, tuve la impresión de que REST es sólo otra palabra para HTTP. ¿Alguien puede explicar qué funcionalidad agrega REST a HTTP?

Nota : No estoy buscando una comparación entre REST y SOAP.

Dimitri C. avatar Feb 03 '10 16:02 Dimitri C.
Aceptado

No, REST es la forma en que se debe utilizar HTTP .

Hoy en día sólo utilizamos una pequeña parte de los métodos del protocolo HTTP, concretamente GETy POST. La forma REST de hacerlo es utilizar todos los métodos del protocolo.

Por ejemplo, REST dicta el uso de DELETEpara borrar un documento (ya sea un archivo, estado, etc.) detrás de un URI, mientras que, con HTTP, haría un mal uso de una consulta GETo POSTcomo ...product/?delete_id=22.

aefxx avatar Feb 03 '2010 09:02 aefxx

HTTP es un protocolo utilizado para la comunicación, generalmente utilizado para comunicarse con recursos de Internet o cualquier aplicación con un cliente de navegador web.

REST significa que el concepto principal que estás utilizando al diseñar la aplicación es el Recurso: para cada acción que deseas realizar necesitas definir un recurso en el que a menudo solo realizas operaciones CRUD, lo cual es una tarea simple. Para eso es muy conveniente usar cuatro verbos usados ​​en el protocolo HTTP contra las cuatro operaciones CRUD (GET para Leer, POST es para CREAR, PUT es para ACTUALIZAR y DELETE es para ELIMINAR).

Esto es diferente al concepto anterior de RPC (llamada a procedimiento remoto), en el que tienes un conjunto de acciones que deseas realizar como resultado de la llamada del usuario. Si piensa, por ejemplo, en cómo describir un Me gusta de Facebook en una publicación, con RPC puede crear servicios llamados AddLikeToPosty RemoveLikeFromPosty administrarlos junto con todos los demás servicios relacionados con las publicaciones de Facebook, por lo que no necesitará crear un objeto especial para Como.

Con REST tendrás un objeto Me gusta que se gestionará por separado con las funciones Eliminar y Crear. También significa que describirá una entidad separada en su base de datos. Puede parecer una pequeña diferencia, pero trabajar así normalmente produciría un código mucho más simple y una aplicación mucho más simple. Con ese diseño, la mayor parte de la lógica de la aplicación es obvia a partir de la estructura del objeto (modelo), a diferencia de RPC con el que normalmente tendrías que agregar explícitamente mucha más lógica.

Diseñar una aplicación RESTful suele ser mucho más difícil porque requiere que describas cosas complicadas de una manera sencilla. Describir todas las funcionalidades usando solo funciones CRUD es complicado, pero después de hacerlo tu vida será mucho más simple y descubrirás que escribes métodos mucho más cortos.

Una restricción más que presenta la arquitectura REST es no utilizar un contexto de sesión cuando se comunica con un cliente (sin estado), lo que significa que toda la información necesaria para comprender quién es el cliente y qué quiere se pasa con el mensaje web. Cada llamada a una función es autodescriptiva, no existe una conversación previa con el cliente a la que se pueda hacer referencia en el mensaje. Por lo tanto, un cliente no podría decirte "dame la página siguiente" ya que no tienes una sesión para almacenar cuál es la página anterior y qué tipo de página quieres, el cliente tendría que decir "mi nombre es Yuval, consígueme la página 2 de una publicación específica en un foro específico". Esto significa que se tendrían que transferir un poco más de datos en la comunicación, pero piense en la diferencia entre encontrar un error informado desde la función "obtenerme la página siguiente" en lugar de "obtenerme la página 2 de la pregunta ID 2190836 en el desbordamiento de pila". .

Por supuesto, hay mucho más, pero en mi humilde opinión estos son los conceptos principales en una cucharadita.

Yuval Perelman avatar Sep 26 '2015 11:09 Yuval Perelman

REST impone el uso de los comandos HTTP disponibles tal como estaban destinados a usarse.

Por ejemplo, podría hacer:

GET
http://example.com?method=delete&item=xxx

Pero con el resto, usaría el método de solicitud "ELIMINAR", eliminando la necesidad del parámetro de consulta "método".

DELETE
http://example.com?item=xxx
Dss avatar Mar 24 '2015 17:03 Dss