Compartir a través de


Este artículo proviene de un motor de traducción automática.

Estación de servicio

Más REST on

Jon Flanders

Contenido

¿Que es mejor, REST o SOAP?
¿Qué ocurre con seguridad? ¿No es más seguro que REST SOAP?
¿Qué ocurre con las transacciones?
¿Qué ocurre con interoperabilidad? ¿No debe estar sobre interoperabilidad SOAP? ¿No más interoperable que REST SOAP?
Pero ¿qué sucede metadatos? Por lo tanto, ¿qué ocurre si es así interoperable REST, hay no WSDL con REST y sin WSDL, no puede generar un proxy de cliente para llamar a un servicio. Es difícil utilizar REST.
¿Qué ocurre si desea utilizar un transporte distinto de HTTP?
¿Después de esa información, no indicando que REST es adecuado para las aplicaciones de Internet y SOAP para las aplicaciones empresariales?
Última línea

En las dos últimas columnas, ha descrito los conceptos básicos de REST y hablado exponer y consumir fuentes Web. En esta columna, le responda una serie de preguntas que a menudo surgen al realizar presentaciones o dirigir sesiones de formación sobre el uso REST para generar aplicaciones basadas en servicio.

¿Que es mejor, REST o SOAP?

Esto es una de las preguntas más comunes que aparece sobre REST y es probablemente menos justo. REST y SOAP se denominan a menudo "Web de servicios," y uno a menudo se utiliza en lugar de la otra, pero son totalmente diferentes enfoques. REST es un estilo de arquitectura para generar aplicaciones de cliente-servidor. SOAP es una especificación de protocolo para intercambiar datos entre dos extremos.

Comparar REST con el estilo de procedimiento remoto (RPC) de la llamada de creación de aplicaciones de cliente-servidor sería más precisa. RPC es un estilo (en lugar de un protocolo, que es SOAP es) de creación de aplicaciones en el que se utiliza un proxy (generalmente generado desde los metadatos) en espacio de dirección del cliente para comunicarse con el servidor y interfaz del proxy imita la interfaz del servidor de cliente servidor. Aunque SOAP no requiere el estilo RPC, están enfocadas a más modernos Kits de herramientas SOAP (mínimo predeterminado para) mediante RPC.

En contraste con RPC, REST carece el proxy generado por los metadatos (consulte la siguiente pregunta para obtener más información), lo que significa que el cliente menor junto al servicio. También, puesto que REST se basa en la semántica de HTTP, las solicitudes de datos (las solicitudes GET) pueden almacenarse en caché. RPC sistemas suelen no tienen ninguna tal infraestructura (y incluso cuando se realiza utilizando SOAP a través de HTTP de RPC, no pueden almacenarse en caché respuestas SOAP dado que SOAP utiliza el verbo HTTP POST, que se considera no seguro). SOAP intencionadamente eschews HTTP, específicamente para permitir SOAP trabajar con otros protocolos, por lo que es realmente un poco disingenuous para llamar a servicios Web de servicios basados en SOAP.

Mi perspectiva es que REST y SOAP pueden utilizarse para implementar una funcionalidad similar, pero en general SOAP debe utilizarse cuando se necesita una característica concreta de SOAP, y las ventajas de REST que generalmente la mejor opción en caso contrario.

¿Qué ocurre con seguridad? ¿No es más seguro que REST SOAP?

Esta pregunta toca uno de Mis peeves mascota porque la respuesta es claramente no. Es igual de fácil asegurar un servicio RESTful que va a proteger un servicio basado en SOAP. En la mayoría de casos que implican REST o SOAP, el sistema de seguridad es el mismo: algún tipo de autenticación basada en HTTP más Secure Sockets Layer (SSL). Aunque técnicamente la tecnología para conversaciones seguras a través de HTTP ahora se denomina seguridad de nivel de transporte (TLS), SSL sigue siendo el nombre utilizado con más frecuencia.

¿Qué es true es que un servicio basado en SOAP, debido a los protocolos adicionales de especificado en diversos WS-* las especificaciones, seguridad de compatibilidad con los mensajes de extremo a extremo hace. Esto significa que si se pasa mensajes SOAP de extremo a extremo, protocolos el mismo o diferente, el mensaje es seguro. Si la aplicación necesita esta característica en concreta, SOAP y WS-* es definitivamente la forma de ir. REST probablemente no es una opción aquí debido su dependencia de HTTP y intrínsecamente que desea se va diseñando una aplicación multiprotocolo. Creo que el hecho de que SOAP con WS-* seguridad de nivel de mensaje de extremo a extremo permite es el origen de la idea de muy extendida que servicios basados en SOAP son más seguros que servicios RESTful.

Otra área en que WS-* gente ha dedicado mucho tiempo y esfuerzo recientemente es seguridad federada. La idea simple detrás de la identidad federada consiste en crear confianza entre dos compañías, donde los usuarios autenticados de una compañía pueden confianza y considera autenticado por otra compañía sin la segunda empresa tener que mantener la información de autenticación (nombre de usuario y contraseña, normalmente). Diversos WS-* especificaciones tienen las implementaciones de todos los proveedores principales, y Microsoft está integrando las ideas en Active Directory a través de servicios de federación de Active Directory (ADFS).

En el territorio de seguridad federada, WS-* arena ciertamente tiene más estándares de la arena RESTful (y esto probablemente siempre seguirán el caso), pero hay esfuerzos para admitir la seguridad federada en el mundo de REST. OpenID es un esfuerzo de tal. El bus de servicios .NET (parte de Windows Azure) también contiene un servicio de identidad federada, que funciona igual de bien con HTTP (y, por lo tanto, REST) tal como se hace con servicios basados en SOAP.

¿Qué ocurre con las transacciones?

Aquí es otra área en que SOAP y WS-* tiene compatibilidad explícita para una característica de "avanzada" y REST tiene ninguno. Transacciones atómicas de WS admite la semántica transaccional de confirmación en dos fases, distribuidas a través de servicios basados en SOAP. REST no tiene soporte para las transacciones distribuidas.

En general, si desea algo parecido a las transacciones en un sistema RESTful, cree un nuevo recurso. Se solucionó (un recurso nuevo siempre que ejecute un problema con un sistema RESTful generalmente al crear la mayoría de los problemas.) Puede tener un recurso denominado transacciones. Cuando el cliente necesita hacer algo transaccional (como transferir dinero entre dos bancos), el cliente crea un recurso de transacción que especifica todos los recursos correctos afectados (en mi ejemplo, las dos cuentas bancarias) siguiendo un POST para la fábrica de transacciones URI. El cliente, a continuación, puede realizar actualizaciones enviando un PUT a la transacción URI y cerrar la transacción enviando DELETE a la dirección URI.

Por supuesto, esto, requiere cierta cantidad de control de código de mano y explícito sobre el sistema, mientras que el sistema de transacciones de WS-atómica es más automático puesto (en el caso de Windows Communication Foundation) está vinculada al establecimiento del tiempo de ejecución.

Si el sistema necesita absolutamente atómica semántica transaccional a través de diversos sistemas, probablemente es la forma para ir de transacciones atómicas de WS. Utilizar transacciones distribuidas de esta forma puede o no es inteligente porque aumenta el acoplamiento entre los dos sistemas y crea posibles problemas si no controla el código en ambos extremos. Pero lo más importante es utilizar la herramienta adecuada para el trabajo de la derecha (una vez haya averiguar qué el trabajo de la derecha es).

En la defensa de REST, creo que es feria diga distribuido que hoy dado, las arquitecturas orientadas a servicios, acoplamiento dos extremos estrechamente con una transacción distribuida puede no ser el mejor diseño. Por otro lado, algunas situaciones llamar a este tipo de funcionalidad y si lo necesita, utilice SOAP y WS-atómica transacciones.

¿Qué ocurre con interoperabilidad? ¿No debe estar sobre interoperabilidad SOAP? ¿No más interoperable que REST SOAP?

Si define interoperabilidad como la capacidad técnica para comunicarse entre dos extremos divergentes, assert que REST gana la batalla de interoperabilidad de laboratorio hacia abajo.

Desde uno de los puntos de conducción detrás de la creación de la especificación SOAP se crea una forma interoperable para comunicarse entre distintas plataformas y lenguajes diferentes, muchas personas se sorprende por esta afirmación. Pero ha ocurrido algo divertido en la forma a la amplia interoperabilidad: WS-* especificaciones (y las implementaciones de proveedores de especificaciones dichas) realizan servicios SOAP menos interoperable en lugar de más interoperable.

El problema en SOAP y WS-* arena es el gran número de estándares diferentes (y versiones de cada uno de esos estándares) para elegir. Y cuando se elige un determinado proveedor implementar un estándar determinado, dicho proveedor a menudo proporciona una implementación sólo ligeramente diferente de otro fabricante (o todos los demás). Esto conduce a problemas siempre que tenga que cruzar límites de proveedor (idiomas y sistema operativo).

Por supuesto, incluso para utilizar SOAP necesita un kit de herramientas SOAP en la plataforma, que la mayoría (pero no todas) de plataformas tienen hoy. Y, a continuación, tendrá que enfrentarse a multitud de WS-* especificaciones y averiguar que utilizar (o no utilizar) y cómo que afecta a la interoperabilidad. Para ser sinceros, es el tipo de un desastre ahí.

En términos de plataformas, REST tiene la ventaja porque todo lo que necesita utilizar REST es una pila HTTP (ya sea en el cliente o el servidor). Puesto que casi cada plataforma y el dispositivo tienen hoy, diría que REST tiene la interoperabilidad más amplia. Dado que los dispositivos móviles, dispositivos domésticos, dispositivos de punto de venta, reproductores de DVD y TV todos tienen conectividad de Internet, hay más plataformas que tener un SOAP completo kit de herramientas es imposible o improbable. Y aunque haya un kit de herramientas SOAP para una plataforma en particular, la posibilidad de que funcione con implementación de otra plataforma no es 100 %.

Pero ¿qué sucede metadatos? Por lo tanto, ¿qué ocurre si es así interoperable REST, hay no WSDL con REST y sin WSDL, no puede generar un proxy de cliente para llamar a un servicio. Es difícil utilizar REST.

Es cierto que en el mundo de REST, hay no existe compatibilidad directa para generar a un cliente en los metadatos generados por lado servidor, ya que hay en el mundo de SOAP con lenguaje de descripción de servicio Web (WSDL). Se están poniendo un par de esfuerzos para obtener dicha compatibilidad en REST, uno que se va a una especificación paralela, conocida como WADL (lenguaje de descripción de aplicaciones Web). La otra es un inserción utilizar 2.0 WSDL para describir RESTful extremos. A menudo digo que REST es simple, pero simple no siempre significa fácil. SOAP es fácil (debido de WSDL), pero fácil no siempre significa simple.

Sí, el uso de WSDL hace generar un proxy para un servicio basado en SOAP más fácil que escribir el código para llamar a un servicio RESTful. Pero una vez generar a dicho proxy, tendrá que seguir conocer la API. No hay nada en el WSDL indica qué método de llamada primera o segunda o si necesita llamar a los métodos en ningún orden concreto, en absoluto. Estos son todos los aspectos que debe averiguar después de generar al proxy y son el código para utilizar el servicio de prototipos.

Crear a un cliente contra un servicio RESTful significa que están aprendiendo el servicio y cómo funciona como se genere al cliente. Cuando haya terminado, tener un conocimiento completo del servicio, sus recursos y la interacción que puede hacer con dichos recursos. Para mí, se trata de una gran ventaja. Puesto que servicios RESTful siga las restricciones de REST (al menos se supone que), hay una convención que pueden seguir fácilmente como determinar las distintas partes del servicio.

Además, out en wilds de tierra de desarrollador, la mayoría de los servicios están incluidos en algo a menudo denominado a un "Agente de servicio", que es otra capa de direccionamiento indirecto para proteger a los clientes de los cambios en la capa de servicio. Esto puede ser necesario en REST o SOAP.

Otro punto es que los servidores proxy generados por los metadatos forman parte de qué SOAP se pretende obtener lejos de la era RPC, concretamente local remoto transparencia. El concepto de tener una API en el cliente que coincida con la API en el servidor se considera una mala idea, pero es exactamente lo que sucede en la mayoría de los servicios basados en SOAP. También tiene un proxy generado por los metadatos en REST reduce las posibilidades de aprovechar Hipervinculación con. Utilizando hipertexto como el motor de estado de aplicación (HATEOAS) es una de las restricciones de REST y utilizarlo requiere que una más API cliente de correspondencia imprecisa.

El último punto efectuará es que como soporte técnico para REST se convierte en más ubicuo crear clientes obtendrá más fácil y más fácil. Si observa el Windows Communication Foundation (WCF) REST starter kit, incluye funciones que vaya en esta dirección. El nuevo facilita HttpClient API mediante HTTP mucho más fácil de utilizar la API de WebRequest y WebResponse .NET. Además, hay una nueva Pegar como herramienta XML serializable, que permite copiar un fragmento de XML (por ejemplo de la documentación de un extremo RESTful) y generar un tipo .NET que puede representar esa instancia XML en la aplicación. Esto es similar a lo que las herramientas WCF hacer automáticamente para el servicio completo con WSDL. A lo largo del tiempo, estas herramientas será mucho más sofisticadas, simplificar aún más la experiencia del cliente en WCF cuando se utiliza servicios RESTful.

¿Qué ocurre si desea utilizar un transporte distinto de HTTP?

La respuesta (algo sarcastic) común de la comunidad REST aquí es, "Ir adelante, no hay nada detener." De forma realista, sin embargo, REST está actualmente vinculada a HTTP, si sólo porque la mayoría de los desarrolladores y equipos de los desarrolladores no tienen la hora de ingeniería esfuerzo necesario para obtener la semántica de REST para funcionar a través de, digamos, de TCP/IP.

La respuesta común es técnicamente correcta, ya que nada está deteniendo de implementación de los conceptos de REST a través de otros protocolos, pero hasta que los proveedores agregar compatibilidad para esto, me resulta una propuesta de dudoso para la mayoría.

¿Después de esa información, no indicando que REST es adecuado para las aplicaciones de Internet y SOAP para las aplicaciones empresariales?

Si ha leído el resto de esta columna, puede imaginar probablemente que Creo que esta instrucción es generalizado y false. A menudo oigo esta idea después de tratar la falta de compatibilidad de transacción distribuida explícita en REST frente a la compatibilidad explícita en transacciones atómicas de WS. Mi retort suele ser algo como "Bueno, ASP.NET no tiene compatibilidad con transacciones distribuidas, pero significa ASP.NET no es útil para las empresas?"

Mi punto es que no cada tecnología resuelve cada problema y hay muchas tecnologías no compatibles con las personas de las características típicas de reflexión de piensan de empresas pero que son increíblemente útil para las empresas no obstante.

De hecho, cuando pienso en aplicaciones empresariales, Creo que a menudo de velocidad y la escalabilidad, escalabilidad, siendo una de las diferencias principales entre REST y SOAP. Servicios SOAP son mucho más difíciles de escala que servicios RESTful, que es, por supuesto, una de las razones REST a menudo se elige como la arquitectura de servicios que se exponen a través de Internet (como Facebook, MySpace, Twitter y así sucesivamente).

Dentro de las empresas, las aplicaciones también a menudo necesitan escala así. El uso de REST significa que puede tomar las ventajas de almacenamiento en caché de HTTP y otras características, como GET condicional, que ayudan a escala servicios. Muchas de estas técnicas no se puede usar con SOAP porque SOAP utiliza POST a través de HTTP.

Última línea

Espero que después de leer esta columna, se piensa que la respuesta a "que es mejor, REST o SOAP?" es "It depende". Tanto el estilo arquitectónico REST SOAP y WS-* protocolos tienen ventajas e inconvenientes en cuanto al crear servicios. Aquellos de nosotros en el campamento RESTafarian (Sí, debe dar aquí divulgación completa: estoy definitivamente en esa campamento) creer que la mayoría de los casos de servicio, REST ofrece más ventajas que SOAP o WS-*. Por otro lado, SOAP y WS-* tienen algunas características que son fácil (y posibles) para implementar mediante REST. Cuando necesite las características específicas, definitivamente desea utilizar tiempos de ejecución y kits de herramientas que pueden proporcionar estas características. Aunque esta columna no estaba específicamente sobre WCF, una característica útil de adopción de WCF es que admite REST y SOAP/WS-*. Mover hacia delante y hacia atrás entre los dos mundos resulta más fácil si tiene una programación y modelo de motor en tiempo de ejecución para obtener más información.

Envíe sus preguntas y comentarios a sstation@microsoft.com.

Jon Flanders es un consultor independiente, el altavoz y el instructor para Pluralsight. Está especializado en BizTalk Server, Windows Workflow Foundation y Windows Communication Foundation. Puede ponerse en contacto con Jon en masteringbiztalk.com/blogs/Jon.