web services - services - ¿Por qué uno usaría REST en lugar de servicios basados en SOAP?
web service rest (11)
Aquí hay un punto de datos: Amazon ofrece sus API en formatos REST y SOAP y el 85% del uso es REST.
REST es más fácil de implementar, más fácil de entender y de mayor rendimiento.
Asistí a una demostración interesante en REST hoy, sin embargo, no pude pensar en una sola razón (ni se presentó) por qué REST es mucho mejor o más simple de usar e implementar que una pila de Servicios basada en SOAP.
¿Cuáles son algunas de las razones por las cuales alguien en el "mundo real" utiliza REST en lugar de los Servicios basados en SOAP?
Asumo que cuando dices "servicios web" te refieres a SOAP y al conjunto de estándares WS- *. (De lo contrario, podría argumentar que los servicios REST son "servicios web").
El argumento canónico es que los servicios REST están más cerca del diseño de la web, es decir, el diseño de HTTP y la infraestructura asociada. Por lo tanto, el uso de un servicio REST será más compatible con las herramientas y técnicas web existentes.
Por supuesto, una vez que profundice en detalles, descubrirá que ambos enfoques tienen puntos fuertes en diferentes escenarios. ¿Son esos detalles que te interesan?
Es súper simple y delgado. Podrías hacerlo con el navegador a través del verbo http: GET. No he encontrado un navegador que pueda hacer manualmente la solicitud de POST HTTP genérico fácilmente
La sobrecarga no es tan importante como una buena arquitectura.
REST no es un protocolo, es una arquitectura que fomenta un buen diseño escalable. A menudo se elige porque demasiada libertad en RPC puede conducir fácilmente a un diseño deficiente.
La otra razón es el costo predecible de los protocolos RESTful a través de HTTP porque puede aprovechar las tecnologías existentes (principalmente proxies). El costo inicial de RPC es bastante bajo, pero tiende a aumentar significativamente con la intensificación de la carga.
Menos gastos generales (sin sobre SOAP para envolver todas las llamadas)
Menos duplicación (HTTP ya representa operaciones como DELETE, PUT, GET, etc. que de otro modo deberían representarse en un sobre SOAP).
Más estandarizado: las operaciones HTTP se entienden bien y funcionan de manera coherente. Algunas implementaciones de SOAP pueden ser complicadas.
Más humano legible y comprobable (más difícil de probar SOAP con solo un navegador).
No es necesario usar XML (bueno, tampoco es necesario para SOAP, pero apenas tiene sentido ya que está analizando el sobre).
Las bibliotecas han hecho SOAP (tipo de) fácil. Pero estás abstrayendo mucha redundancia debajo como he notado. sí, en teoría, SOAP puede pasar por otros transportes para evitar subirse a una capa haciendo cosas similares, pero en realidad casi todo el trabajo SOAP que harás será a través de HTTP.
REST es básicamente solo una forma de implementar servicios web. Es solo una forma de utilizar HTTP correctamente para consultar los servicios web a los que intenta acceder.
REST es independiente de la implementación y mucho más transparente, y esto lo hace ideal para API públicas, especialmente para grandes sitios web como Flickr, Amazon o Digg que utilizan sus API como herramientas de marketing y realmente quieren que las personas consuman sus datos. No quieren ser miles de desarrolladores noveles que intentan depurar su lenguaje de scripting de la biblioteca SOAP defectuosa.
Versus SOAP y WSDL, que son mejores para las aplicaciones internas, donde tiene bibliotecas integradas y personas conocidas en ambos extremos. (Y tal vez no tenga que preocuparse por cosas como el equilibrio de carga a escala de Internet, el almacenamiento en caché de HTTP, etc.) Luego obtiene API que están auto-documentadas, conservan tipos, etc. con cero trabajo.
REST permite que sus operaciones no mutantes (que generalmente usan el verbo GET) sean almacenadas en caché . Es decir, almacenado en caché por el cliente y / o almacenado en caché por proxies. ¡Esto puede ser una gran victoria!
Tengo que leer la dissertation más excelente de Roy Fielding sobre el tema. Él hace un caso excelente y definitivamente estaba MUY adelantado a su tiempo cuando lo escribió (2000).
RESTful servicios RESTful son mucho más simples de consumir que los servicios basados en SOAP (regulares). La razón de esto es que REST se basa en solicitudes HTTP normales que permiten inferir intención a partir del tipo de solicitud que se realiza (GET = retrive, POST = write, DELETE = eliminar, etc ...) y es completamente sin estado. Por otro lado, podría argumentar que es menos flexible ya que elimina el concepto de un sobre de mensaje que contiene contexto de solicitud.
En mi experiencia SOAP se ha preferido para los servicios dentro de la empresa y REST se ha preferido para los servicios que están expuestos como API públicas.
Con herramientas como WCF en .NET Framework, es muy trivial implementar un servicio como REST o SOAP.
Algunas lecturas relevantes:
El blog de Steve Vinoski y sus últimos artículos definitivamente merecen una visita. Es un ex gurú de CORBA, que escribió probablemente el mejor libro sobre el tema con Michi Henning, "Programación avanzada de CORBA® con C ++" . Sin embargo, desde entonces ha visto el error de sus formas cliente / servidor, y ahora jura por REST.