J'ai lu sur REST et SOAP et je comprends pourquoi la mise en œuvre de REST peut être bénéfique par rapport à l'utilisation d'un protocole SOAP. Cependant, je ne comprends toujours pas pourquoi il n'y a pas d'équivalent "WSDL" dans le monde REST. J'ai vu des articles disant qu'il n'y avait "pas besoin" du WSDL 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, je cherche simplement la raison pour laquelle il n'y a pas de WSDL dans REST, ou pourquoi il n'est pas nécessaire. Merci.
94
Réponses:
Le langage de description d'application Web (WADL) est fondamentalement l'équivalent de WSDL pour les services RESTful, mais il y a eu une controverse en cours sur la nécessité de quelque chose comme ça.
Joe Gregorio a écrit un bel article sur ce sujet qui vaut la peine d'être lu.
la source
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'est-à-dire ne doivent pas en être informés à l'avance dans les URL). Les clients REST sont couplés sur les types de supports qui sont transférés entre le client et le serveur.
Il peut être judicieux de générer automatiquement des classes sur le client pour encapsuler les types de médias retournés. Cependant, dès que vous commencez à créer des classes proxy autour des interactions de service, vous commencez à obscurcir les interactions HTTP et risquez de dégénérer vers un modèle RPC.
la source
RSDL vise à transformer le repos comme un hypermédia, c'est-à-dire qu'il a plus d'informations qu'un descripteur de service comme WSDL ou WADL. Par exemple, il contient des informations sur la navigation, telles que l'hypertexte et les hyperliens.
Par exemple, étant donné une ressource actuelle, vous avez un ensemble de liens os vers d'autres ressources liées.
Cependant, je n'ai pas trouvé de clients de repos prenant en charge ce format ou de solutions de serveur de repos avec une fonctionnalité permettant de le générer automatiquement.
Je pense qu'il y a un long chemin pour une conclusion à ce sujet. Voir la longue histoire HTML et W3C vs Browsers lol.
Pour plus de détails sur Rest comme Hypermedia, regardez: http://en.wikipedia.org/wiki/HATEOAS
Remarque: Roy Fielding a critiqué ces tendances dans Rest Apis sans l'approche de l'hypermidie: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Ma conclusion: Now a Days, WADL est plus courant que les Frameworks de repos et d'intégration comme Camel CXF supportent déjà WADL (générer et consommer), car il est similaire à WSDL, donc plus facile à comprendre dans ce processus de migration (SOAP vers REST).
Voyons les prochains chapitres;)
la source
D'accord de tout cœur, c'est pourquoi j'utilise Swagger.io
Donc, fondamentalement, j'utilise Swagger pour décrire mes modèles, mes points de terminaison, etc., puis j'utilise d'autres outils comme swagger-codegen pour générer les classes proxy au lieu de les coder manuellement.
Voir aussi: RAML
la source
Il existe un RSDL (langage de description de service reposant) qui équivaut à 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 avons beaucoup d'outils pour générer du code de wsdl vers java, ou inversement. Mais je n'ai trouvé aucun outil pour générer du code à partir de RSDL.
la source
WSDL est extensible pour permettre la description des points finaux et de leurs messages quels que soient les formats de message 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 en conséquence.
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, en utilisant le code d'état201 CREATED
et l'en-têteLocation: *new_profile_id*
(par exemple 12345)Je peux ensuite effectuer des mises à jour en modifiant l'état d'
/profile/12345
utilisation du verbe HTTPPOST
, par exemple pour modifier mes adresses e-mail 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 l'ID généré côté clientDELETE
, évidentHEAD
, 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.
C'est un excellent article sur REST. Cela m'aide vraiment à le comprendre aussi.
la source
La spécification WSDL 2.0 a également ajouté la prise en charge des services Web REST. Le meilleur des deux scénarios du monde. Le problème est que WSDL 2.0 n'est pas encore largement pris en charge 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/
la source
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.
Étant donné que les services RESTful ont des interfaces plus simples, WADL n'est pas aussi nécessaire pour ces services que WSDL l'est pour les services SOAP de type RPC.
la source