Pour décrire RESTful, nous pouvons dire que chaque ressource a son propre URI. En utilisant HTTP GET, POST, PUT et DELETE, nous pouvons utiliser ces ressources. Toutes les ressources sont représentatives. Quiconque souhaite utiliser nos ressources peut le faire via un navigateur ou un client REST.
C'est l'idée principale d'une architecture reposante. Cette architecture permet des services sur Internet. Alors, pourquoi cette architecture a-t-elle besoin de WADL? Qu'est-ce que WADL offre que HTTP standard ne fait pas? Pourquoi le WADL doit-il exister?
Le but de WADL est de définir un contrat. Contrat spécifie comment une partie peut appeler une autre.
Lorsque vous créez une application Web à partir de zéro, vous n'avez pas besoin de contrat ni de WADL.
Lorsque vous intégrez votre système à l'autre système et que vous pouvez communiquer clairement avec son équipe de développement, vous n'avez pas besoin de contrat ni de WADL (car vous pouvez passer un appel téléphonique pour clarifier les choses).
Toutefois, lorsque vous intégrez un système d'entreprise complexe à plusieurs autres systèmes d'entreprise complexes gérés par plusieurs sociétés (ou institutions fédérales), alors croyez-moi vous voulez, définissez un contrat de communication de la manière la plus stricte possible. Ensuite, vous avez besoin de la spécification WADL ou Open. En avez vraiment besoin.
Les personnes ayant de faibles antécédents en entreprise ont tendance à considérer l'ensemble de l'informatique comme un ensemble d'applications Web séparées développées indépendamment. Mais la réalité des entreprises est parfois difficile. Parfois, vous ne pouvez même pas appeler ou écrire aux personnes développant l'application avec laquelle vous devez vous intégrer. Parfois, vous communiquez avec une application héritée qui n'est plus maintenue. Elle s'exécute simplement et vous devez trouver le moyen de communiquer correctement avec celle-ci. Dans de telles conditions, vous avez besoin d'un contrat car cela vous épargne le cul.
En réalité, la génération de clients est la caractéristique mineure de la définition du contrat. C'est juste un jouet. Le contrat oblige les mauvais communicateurs à communiquer clairement les règles d'intégration. C'est la raison principale pour utiliser WADL ou Open Specification ou autre.
L'utilisation de WADL implique que vous ayez peut-être la bonté de définir les données/documents que vous transmettez. Supposons que vous transmettiez des fragments XML, ils pourraient en fait faire partie d'un schéma défini.
Que vous utilisiez ou non le DL pour générer du code n’est pas très important pour moi. Selon mon opinion subjective, ce qui compte, c’est qu’il est important d’avoir un accord formel sur les interfaces entre partenaires commerciaux. Même si ce qui est passé est évident, il est utile d'identifier qui doit réparer quoi plus tard si quelqu'un modifie l'interface précédente.
Le format des données fait tout autant partie d’une interface que les noms de verbe.
WADL s'adresse aux personnes venant du monde SOAP où il est courant d'utiliser un générateur de code pour créer un code côté client basé sur le WSDL. Je ne pense pas que ce mécanisme soit utile dans REST, car il crée un code client couplé aux noeuds finaux du serveur.
Je pense que si vous définissez correctement vos types de supports et utilisez l'hypermédia au sein de ces types de supports, il n'est pas nécessaire de disposer de WADL. La description des terminaux disponibles est contenue dans les définitions de type de média elles-mêmes. Et si vous vous dites maintenant, mais application/xml ne contient aucune information sur les liens hypertexte disponibles, alors je dis BINGO. C'est pourquoi je ne pense pas que application/xml et application/json soient des types de support appropriés pour REST. Je ne dis pas que vous n'utilisez ni XML ni JSON, mais simplement le nom de type de média générique.
L'autre appel de WADL vise à documenter les services REST. Malheureusement, cela conduit les développeurs à emprunter le mauvais chemin car WADL tente de documenter les points d'extrémité côté serveur. La documentation d'un REST service devrait être principalement axée sur les types de média. Un développeur client doit pouvoir écrire un client REST sans connaître l'URL autre que l'URL racine.
WADL vous permet de générer du code, des tests et de la documentation. En fait, il existe peu d'outils très utiles utilisant WADL, vous pouvez en voir quelques exemples ici . Le problème du REST "pur", décrit dans la thèse de Fielding, est l'écriture de clients prenant en charge Hypermedia (imaginez l'écriture d'une application client basée sur Java Swing, par exemple). Avec WADL, cette tâche est entièrement automatisée et constitue à mon avis un avantage considérable. Le test devient aussi un moyen plus facile.
Avant de donner mon explication, permettez-moi de dire que les extrémistes les plus purs REST se moqueront de lui jusqu'au bout du monde. Je ne suis pas d'accord avec eux, car je préférerais que quelque chose soit fait, mais juste pour que vous sachiez.
WADL est une description d'une API de service Web, un peu comme WSDL pour les services Web de type SOAP, qui est conçu pour être plus à l'écoute des interfaces RESTful (quelque chose que WSDL est médiocre).
D'après mon expérience, son utilisation principale est de vous permettre de générer un code client pouvant appeler le service (pratique s'il s'agit d'une très grande API, ce qui permet d'économiser des heures de travail). Il sert également à documenter une interface de type REST.
Lorsque vous souhaitez exposer les services REST, la meilleure méthode consiste à générer une WADL et à la partager avec le consommateur (similaire au WSDL dans les services Web basés sur SOAP).
WADL n'est pas nécessaire d'utiliser. Toutefois, si vous travaillez avec une application existante complexe et que vous souhaitez implémenter un appel de service REST en remplaçant l'appel de service EJB/SOAP, vous utilisez alors WADL de manière très sûre et recommandée. En utilisant WADL, générez des stubs Java côté client, vous serez synchronisé avec le service.
Vous pouvez générer un stub Java côté client à l'aide d'un fichier WADL à l'aide du plug-in wadl2Java maven.