¿Por qué uno usaría REST en lugar de servicios basados ​​en SOAP? [cerrado]

153

Asistí a una demostración interesante sobre REST hoy, sin embargo, no pude pensar en una sola razón (ni se presentó una) por la cual REST es de todos modos 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" usa REST en lugar de los servicios basados ​​en SOAP?

AngryHacker
fuente
37
Por servicios web, ¿se refiere a los servicios web de estilo SOAP? Porque, que yo sepa, también puedes tener servicios web RESTful.
James McMahon

Respuestas:

160

Menos gastos generales (sin sobre SOAP para envolver cada llamada)

Menos duplicación (HTTP ya representa operaciones como DELETE, PUT, GET, etc. que de otro modo deben representarse en un sobre SOAP).

Más estandarizado: las operaciones HTTP se entienden bien y funcionan de manera consistente. Algunas implementaciones de SOAP pueden ser complicadas.

Más legible y comprobable para los humanos (más difícil de probar SOAP con solo un navegador)

No es necesario usar XML (bueno, tampoco tiene que usar SOAP, pero no tiene sentido ya que ya está analizando el sobre).

Las bibliotecas han hecho SOAP (más o menos) fácil. Pero está abstrayendo mucha redundancia debajo, como he señalado. sí, en teoría, SOAP puede pasar por otros transportes para evitar subir sobre una capa haciendo cosas similares, pero en realidad casi todo el trabajo de SOAP que harás será a través de HTTP.

Kendall Helmstetter Gelner
fuente
1
Me gustaría agregar que la comunicación SOAP entre plataformas también puede ser una PITA (¿no era esa parte del objetivo de SOAP?!?).
Justin Bozonier
77
También funciona muy bien con la infraestructura HTTP, por ejemplo, los GET se almacenan en caché de forma agresiva junto con el uso de la última modificación y etags
James Strachan
Trabajar muy bien con los navegadores web para proporcionar un cliente universal a sus servicios también ayuda :)
James Strachan
2
Yo diría que SOAP está bien estandarizado. Si quiere decir que las implementaciones son inmaduras, entonces sería bueno aclararlo. Valoraría alguna evidencia de esta opinión si sugiere esto. También me preguntaría si REST es más legible para los humanos, esto depende completamente de cómo elijas formatear tu contenido. Y también recuerde que XML está diseñado para ser legible por humanos, aunque es detallado, como todos sabemos.
Howard mayo
66
HTTP está tan estandarizado como SOAP, y ha existido por más tiempo, por lo que las implementaciones son realmente estables en todos los ámbitos y realmente interoperables. SOAP también será inherentemente menos legible, incluso dado un contenido idéntico, debido a la envoltura en la que está envuelto el contenido. En la práctica, en los últimos años, he encontrado que JSON sobre HTTP es la mejor combinación, solo lo suficientemente legible mientras se Aún más compacto.
Kendall Helmstetter Gelner
36

Los 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 la intención del tipo de solicitud que se realiza (GET = recuperar, POST = escribir, 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 el contexto de la solicitud.

En mi experiencia, SOAP ha sido preferido para servicios dentro de la empresa y REST ha sido preferido para 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:

Eric Schoonover
fuente
9
Entiendo que los archivos WSDL se pueden usar para generar clases para exponer los métodos del servicio web. ¿Seguramente esto hace que el consumo de los servicios sea tan fácil como llamar a una función? ¿Puedes explicar tu punto de vista un poco más por favor?
Howard May
1
Howard May: Suponiendo que llame a funciones utilizando solo tipos de datos primitivos, esto es ciertamente cierto. Pero en ese caso no se puede argumentar exactamente que SOAP es más fácil que descansar. Si tiene tipos de datos complejos, el procesamiento WSDL puede funcionar bien entre dos máquinas con las mismas pilas WS. Pero inevitablemente tendrá problemas tan pronto como mezcle pilas. Deja de ser tan fácil una vez que tienes que cavar en WSDL a mano para eliminar incompatibilidades.
Joseph Holsten
1
En 2014, casi todas las plataformas, incluso las antiguas, admiten WSDL. Las clases de proxy hacen que el uso de la API sea extremadamente simple. Estamos implementando un servicio push y estoy considerando REST, pero realmente estoy teniendo problemas para ver algún beneficio.
JohnOpincar
13

Asumiré 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 coinciden más con el 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 fortalezas en diferentes escenarios. ¿Son esos detalles los que te interesan?

Bruce
fuente
10

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 mal diseño.

La otra razón es el costo predecible de los protocolos RESTful sobre 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.

Piotr Czapla
fuente
7

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 están utilizando sus API como herramientas de marketing y realmente quieren que las personas consuman sus datos. Ellos no quieren ser 1000s mano de retención de los desarrolladores novatos que están tratando de depurar su lenguaje de script de la biblioteca de SOAP con errores de elección.

Versus SOAP y WSDL, que son mejores para aplicaciones internas, en las que tiene bibliotecas integradas y personas claves 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é HTTP, etc.) Luego obtiene API que están auto documentadas, preservan tipos, etc. con cero trabajo.

joelhardi
fuente
Una buena respuesta, pero no estoy de acuerdo con que SOAP significa que no puede tener un equilibrio de carga a escala de Internet.
HDave
7

Tengo que leer la tesis más excelente de Roy Fielding sobre el tema. Se hace un excelente caso y fue definitivamente MANERA adelantado a su tiempo cuando lo escribió (2000).

Piko
fuente
5

REST permite que sus operaciones no mutantes (que generalmente usan el verbo GET) se almacenen en caché . Es decir, en caché por el cliente y / o en caché por servidores proxy. ¡Esto puede ser una gran victoria!

David
fuente
8
Eso es simplemente 'usar HTTP correctamente' y no REST.
aehlke
0

Es super simple y delgado. Puede hacerlo con el navegador a través del verbo http: GET. No he encontrado un navegador que pueda hacer manualmente la solicitud genérica HTTP POST fácilmente

Ray Lu
fuente
1
Comprobación Fiddler. No es un navegador, pero es una excelente manera de construir HTTP POST sin código. fiddler2.com/fiddler2
Eric Schoonover
Normalmente lo hago modificando la solicitud existente con Charles. Yo también tengo Fiddler.
Ray Lu
0

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.

Pbreitenbach
fuente
77
¿Tiene alguna referencia para su declaración de "mayor rendimiento"?
James McMahon
3
¿De dónde sacaste el 85% de uso? Es muy bueno saberlo (si puedo ver pruebas)
schmoopy
3
¿Leer más manualmente una especificación API, imprimir páginas, etc. es más fácil de implementar que "Hacer clic con el botón derecho, Agregar referencia de servicio"? (VS2010)
BlueChippy
@schmoopy Del blog de Amazon: aws.typepad.com/aws/2005/09/rest_vs_soap.html
joerage