web-dev-qa-db-fra.com

Services RESTful - Équivalent WSDL

J'ai lu des articles sur REST et SOAP et je comprends pourquoi mettre en œuvre REST peut être bénéfique par rapport à l'utilisation d'un protocole SOAP. Cependant, je ne comprends toujours pas pourquoi il n’existe pas d’équivalent "WSDL" dans le monde REST. J'ai vu des publications affirmant que le WSDL n'était "pas nécessaire" ou qu'il serait redondant dans le monde REST, mais je ne comprends pas pourquoi. N'est-il pas toujours utile de se lier par programme à une définition et de créer des classes proxy au lieu de coder manuellement? Je ne veux pas entrer dans un débat philosophique, mais simplement chercher la raison pour laquelle il n'y a pas de WSDL dans REST ou pourquoi ce n'est pas nécessaire. Merci.

86
skaz

Le langage de description d'application Web (WADL) est fondamentalement l'équivalent de WSDL pour les services RESTful, mais une controverse persiste quant à la nécessité éventuelle d'un tel système.

Joe Gregorio a écrit un article de Nice sur ce sujet qui mérite d’être lu.

39
joschi

WSDL décrit les points de terminaison de service. Les clients REST ne doivent pas être couplés aux points de terminaison du serveur (c.-à-d. Qu'ils ne doivent pas être informés à l'avance dans les URL). Les clients REST sont couplés sur les types de média transférés entre le client et le serveur. 

Il peut être judicieux de générer automatiquement des classes sur le client pour envelopper les types de média renvoyés. Cependant, dès que vous commencez à créer des classes proxy autour des interactions de service, vous commencez à obscurcir les interactions HTTP et vous risquez de dégénérer en modèle RPC.

16
Darrel Miller

RSDL a pour objectif de tourner au repos comme un hypermédia. En d'autres termes, il contient plus d'informations qu'un descripteur de service tel que WSDL ou WADL. Par exemple, il contient des informations sur la navigation, telles que les liens hypertextes et hypertextes. 

Par exemple, pour une ressource en cours, vous avez un ensemble de liens OS vers une autre ressource associée. 

Cependant, je n'ai pas trouvé de clients restants prenant en charge ce format, ni de solutions de serveur reposant sur une fonctionnalité permettant de le générer automatiquement.

Je pense que la conclusion est longue. Voir l'histoire longue HTML et W3C vs Browsers lol. 

Pour plus de détails sur Rest like Hypermedia, consultez le site: http://en.wikipedia.org/wiki/HATEOAS

Remarque: Roy Fielding a critiqué ces tendances dans Rest Apis sans l'approche hypermidia: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Ma conclusion: maintenant quelques jours, le WADL est plus commun que les cadres de repos et d'intégration tels que Camel CXF prennent déjà en charge le WADL (générer et consommer), car il est similaire au WSDL, donc plus facile à comprendre dans ce processus de migration (SOAP à REST).

Voyons les prochains chapitres;)

7
Eduardo Fabricio

N'est-il pas toujours utile de se lier par programme à une définition et à créer des classes proxy au lieu de coder manuellement?

Je suis tout à fait d’accord, c’est pourquoi j’ai personnellement utilisé Swagger.io

Swagger est un puissant framework open source soutenu par un grand écosystème d'outils qui vous aide à concevoir, construire, documenter et consommer vos API RESTful.

J'utilise donc Swagger pour décrire mes modèles, points de terminaison, etc., puis d'autres outils tels que swagger-codegen pour générer les classes proxy au lieu de les coder manuellement.

Voir aussi: RAML

5
Alex Nolasco

Il existe un langage de description de service reposant (RSDL) équivalent à WSDL. L’URL ci-dessous décrit sa pratique http://en.wikipedia.org/wiki/HATEOAS et http://en.wikipedia.org/wiki/RSDL . Le problème est que nous avoir beaucoup d'outils pour générer du code de WSDL à Java, ou inverser. Mais je n'ai trouvé aucun outil pour générer du code à partir de RSDL. 

5
richard

La spécification WSDL 2.0 prend également en charge les services Web REST. Meilleur scénario des deux mondes. Le problème est que WSDL 2.0 n’est pas encore largement supporté par la plupart des outils. WSDL 2.0 est recommandé par le W3C, WSDL1.1 n'est pas recommandé par le W3C mais largement pris en charge par les outils et les développeurs . Réf.: http://www.ibm.com/developerworks/library/ws-restwsdl/

1
supernova

WSDL est extensible pour permettre la description des points de terminaison et de leurs messages, quels que soient le format des messages ou les protocoles réseau utilisés pour communiquer

Cependant, REST utilise le protocole réseau en utilisant des verbes HTTP et l'URI pour représenter un état d'objets.

Les WSDL vous indiquent à cet endroit que si vous envoyez ce message, vous effectuerez cette action et récupérerez ce format.

Dans REST, si je voulais créer un nouveau profil, j'utiliserais le verbe POST avec un corps JSON ou des variables de serveur http décrivant mon profil à l'URL /profile.

POST doit renvoyer un ID généré côté serveur, à l'aide du code d'état 201 CREATED et de l'en-tête Location: *new_profile_id* (par exemple, 12345).

Je peux ensuite effectuer des mises à jour en changeant l'état de /profile/12345 en utilisant le verbe HTTP POST, par exemple pour changer mon adresse électronique ou mon numéro de téléphone. Évidemment changer l'état de l'objet distant.

GET renverrait le statut actuel du /profile/12345

PUT est généralement utilisé pour les identifiants générés côté client

DELETE, évident

HEAD, obtient le statut sans renvoyer le corps.

Avec REST, il devrait être auto-documenté via une API bien conçue et donc plus facile à utiliser.

Ceci est un excellent article sur REST. Cela m'aide vraiment à comprendre aussi.

1
roder

Le langage de description d'application Web (WADL) est un vocabulaire XML utilisé pour décrire les services Web RESTful.

Comme avec WSDL, un client générique peut charger un fichier WADL et être immédiatement équipé pour accéder à toutes les fonctionnalités du service Web correspondant.

Comme les services RESTful ont des interfaces plus simples, WADL n’est pas aussi nécessaire que ces services, contrairement à WSDL, aux services SOAP de style RPC.

0
JSS