2010-11-06 26 views
71

He estado leyendo acerca de REST y SOAP, y entiendo por qué implementar REST puede ser beneficioso con respecto al uso de un protocolo SOAP. Sin embargo, todavía no entiendo por qué no existe el equivalente "WSDL" en el mundo REST. He visto publicaciones que dicen que "no es necesario" para el WSDL o que sería redundante en el mundo REST, pero no entiendo por qué. ¿No es siempre útil vincularse mediante programación a una definición y crear clases de proxy en lugar de codificación manual? No me refiero a entrar en un debate filosófico, simplemente buscando la razón por la cual no hay WSDL en REST, o por qué no es necesario. Gracias.RESTful Services - WSDL Equivalente

+2

Tengo la misma pregunta. Parece que, desde la perspectiva de los clientes, los servicios tranquilos son mucho más difíciles de usar que los servicios WSDL. –

+3

Me parece que si está exponiendo algo simple, entonces no necesita un WADL o WSDL. Pero si expones algo tan complejo como SAP ... no puedo comprender que no tenga algún tipo de reflejo y espacio de nombres para manejar la plétora de funcionalidades. – Brain2000

+0

¿No se podría considerar el método HTTP OPTIONS como "equivalente" ya que debería proporcionar información sobre los métodos y parámetros disponibles necesarios para cualquier acción posible? – Dim13i

Respuesta

33

Web Application Description Language (WADL) es básicamente el equivalente a WSDL para servicios RESTful pero ha habido una controversia en curso sobre si algo así se necesita en absoluto.

Joe Gregorio ha escrito a nice article about that topic, que vale la pena leer.

+1

Gracias Joschi. Leí los artículos, pero no encontré el segundo demasiado convincente. ¿Qué puntos aborda a los que considera más valiosos? – skaz

+1

Vale la pena señalar que .NET también tiene una forma de publicar metadatos (http://msdn.microsoft.com/en-us/library/ms730243.aspx). Dicho esto, la mayoría de los servicios REST que he visto desarrollados por los grandes sitios incluyen una variedad de clientes descargables desarrollados para los principales lenguajes de programación (Java, .NET, PHP, etc.). En mi opinión, esto supone una gran carga para el proveedor del servicio. – dana

+2

@dana: ¿No tiene mucho sentido escribir un servicio que luego requiera que también escriba al cliente? – BlueChippy

15

WSDL describe puntos finales de servicio. Los clientes REST no se deben acoplar a los puntos finales del servidor (es decir, no se deben tener en cuenta en las URL de antemano). Los clientes REST están acoplados en los tipos de medios que se transfieren entre el cliente y el servidor.

Puede tener sentido generar automáticamente clases en el cliente para ajustar los tipos de medios devueltos. Sin embargo, tan pronto como comienza a crear clases proxy en torno a las interacciones del servicio, comienza a oscurecer las interacciones HTTP y se arriesga a degenerar hacia un modelo RPC.

+2

¿Puedes elaborar un poco más? Me temo que no lo entiendo Gracias. – skaz

+0

Pruebe esto http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven –

+1

Las clases de proxy son una forma de tener la validación de la máquina en tiempo de compilación. Sin ellos, solo tiene documentos escritos manualmente y "validación" basada en pruebas. –

1

WSDL is extensible to allow description of endpoints and their messages regardless of what message formats or network protocols are used to communicate

Sin embargo, REST utiliza el protocolo de red mediante el uso de verbos HTTP y el URI para representar un estado de objetos.

WSDL le informan en este lugar, si envía este mensaje, realizará esta acción y obtendrá este formato de nuevo como resultado.

En REST, si quería crear un nuevo perfil que usaría el verbo POST con un cuerpo JSON o variables del servidor HTTP que describen perfil a la URL /profile

POST debe devolver un lado del servidor genera ID, utilizando el código de estado 201 CREATED y la cabecera Location: *new_profile_id* (por ejemplo 12345)

entonces puedo realizar actualizaciones que cambian el estado de /profile/12345 utilizando el verbo HTTP POST, por ejemplo para cambiar mi addresss correo electrónico o número de teléfono. Obviamente cambiando el estado del objeto remoto.

GET sería devolver el estado actual de la /profile/12345

PUT por lo general se utiliza para el lado del cliente genera Identificación

DELETE, obvia

HEAD, obtiene el estado sin devolver el cuerpo.

Con REST debe documentarse a sí mismo a través de una API bien diseñada y, por lo tanto, es más fácil de usar.

This is a great article en REST. Realmente me ayuda a entenderlo también.

+2

Yo diría que es la restricción hipermedia de REST, más que la restricción de interfaz uniforme que elimina la necesidad de WSDL. –

+3

¿Dónde descubres el "perfil"? ¿Cómo se brinda asistencia cuando en lugar de una, tienes docenas? Todo el resto del servicio se basa en documentos escritos a mano y API escritos manualmente, que requieren mucha mano de obra y son propensos a errores. –

+1

Estoy de acuerdo con @EricGrange - por favor, podría explicar CÓMO sabe en qué entidades puede realizar operaciones CRUD (L) EN ... a menos que alguien lo escriba en alguna parte? – BlueChippy

0

El Lenguaje de descripción de aplicaciones web (WADL) es un vocabulario XML utilizado para describir los servicios web RESTful.

Al igual que con WSDL, un cliente genérico puede cargar un archivo WADL y estar inmediatamente equipado para acceder a la funcionalidad completa del servicio web correspondiente.

Dado que los servicios RESTful tienen interfaces más simples, WADL no es tan necesario para estos servicios como WSDL para los servicios SOAP de estilo RPC.

6

RSDL pretende convertir el reposo como un hipermedia, en otras palabras, tiene más información que un descriptor de servicio como WSDL o WADL. Por ejemplo, tiene información sobre navegación, como hipertexto e hipervínculos.

Por ejemplo, dado un recurso actual, tiene un conjunto de enlaces a otros recursos relacionados.

Sin embargo, no encontré Rest Clients que admite este formato o Rest Server Solutions con una característica para generarlo automáticamente.

Creo que hay un largo camino para llegar a una conclusión al respecto. Vea la larga historia en HTML y W3C vs Browsers jajaja.

Para más detalles sobre el descanso como Hipermedia buscar en el diccionario: http://en.wikipedia.org/wiki/HATEOAS

Nota: Roy Fielding ha criticado estas tendencias en Resto Apis sin el enfoque hypermidia: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Mi Conclusión: Hoy en día, WADL es más común que los Frameworks de Descanso e Integración como Camel CXF ya soportan WADL (generar y consumir), porque es similar a WSDL, por lo tanto, es más fácil de entender en este proceso de migración (SOAP a REST).

Veamos los siguientes capítulos;)

1

WSDL especificación 2.0 ha añadido soporte para servicios web REST también. Lo mejor de los dos mundos. El problema es que WSDL 2.0 no es ampliamente compatible con la mayoría de las herramientas que existen. WSDL 2.0 es recomendado por W3C, WSDL1.1 no es recomendado por W3C, pero es ampliamente respaldado por herramientas y desarrolladores. Ref: http://www.ibm.com/developerworks/library/ws-restwsdl/

4

no siempre es útil para unir mediante programación a una definición y crear clases de proxy manualmente en lugar de la codificación?

totalmente de acuerdo, es por eso que he utilizado personalmente Swagger.io

Swagger es un potente marco de código abierto respaldado por un gran ecosistema de herramientas que le ayuda a diseñar, construir, documentar y consumen sus API RESTful.

Así que básicamente utiliza Swagger para describir mis modelos, puntos finales, etc., y luego usar otras herramientas como swagger-codegen para generar las clases de proxy en lugar de codificar manualmente.

Véase también: RAML