web-dev-qa-db-fra.com

REST service Web WSDL?

J'implémente un service Web et j'ai mis en place une version REST et SOAP pour déterminer celle qui répond le mieux à mes besoins.J'ai décidé de choisir REST en raison de sa simplicité et que je développerai probablement une application iPhone pour la consommer. Ma question est simple: est-il possible de créer un WSDL ou un WADL pour mon REST service et est-il nécessaire?

Merci

35
Ian

Avec un bon service RESTful, il n'est pas nécessaire de générer une WADL (sans parler du WSDL, qui l'est beaucoup moins), car il se décrit lui-même. Par "auto-description", je veux spécifiquement dire qu'il fournira des documents décrivant toutes les ressources (pertinentes) publiées par le service et qu'en utilisant une requête HTTP OPTIONS standard sur l'une d'elles, on obtiendra des informations de base sur la manière d'interagir. Le seul avantage réel de l’utilisation de WADL est qu’il permet à l’appelant de découvrir les schémas des documents complexes avec lesquels il doit travailler à l’avance. REST lui-même ne fournit aucune aide (et certains RESTians pensent que cela est contre-productif, ce avec quoi je ne suis pas d'accord).

Bien sûr, cela ne rend pas compte des modèles d’interaction plus profonds, mais la grande majorité des descriptions de services WSDL ne l’est pas non plus, donc aucun changement.


Pour mémoire, j'utilise Apache CXF pour créer des services RESTful (à l'aide de JAX-RS) et publie WADL à leur intention.

38
Donal Fellows

Le W3C a formulé une recommandation formelle pour un standard de documentation REST basé sur WSDL 2.0 . Voici une citation de l'article d'IBM :

Le terme services Web est généralement associé à operation- ou services basés sur des actions utilisant SOAP et les standards WS *, tels que WS-Addressing et WS-Security. Le terme REST services Web en général fait référence à une architecture de services Web basée sur des ressources qui utilise HTTP et XML. Chacun de ces styles de service Web architectural a sa place, mais jusqu'à récemment, le standard WSDL ne supportait pas également les deux modes. La liaison HTTP WSDL 1.1 était inadéquate pour décrire communications avec HTTP et XML, il n'y avait donc aucun moyen de formellement décrire les services Web REST avec WSDL. La publication de WSDL 2.0, conçu pour les services Web REST, en tant que Web La recommandation du consortium (W3C) signifie qu’il existe maintenant un langage pour décrire les services Web REST.

6
chaotic3quilibrium

RestDoc tente de créer un cadre de documentation simple pour les ressources REST. Un navigateur est disponible via restdoc-renderer .

Il propose également annotations Java pour permettre la création à la volée de la documentation RestDoc. Des implémentations sont disponibles pour Jersey 1.x et JAX-RS 2.0 .

3
koppor

Comme @GiuliaDiFederico a déclaré, "bien sûr que c'est possible" (avec WSDL2), montrant un bon lien source sur la façon de le faire. @DonalFellows, d'autre part, n'encourage pas l'utilisation de WSDL ...

Je pense l'utilisation de WSDL est une question de

  • NIVEAU DE FORMALISATION : avec WSDL, vous pouvez exprimer de manière plus formelle tous les détails pertinents de votre service Web. 
  • NIVEAU DE STABILITÉ : si vous avez besoin de contrats à long terme et évitez les risques de modification de l’environnement où votre service Web est exposé, WSDL vous aide à maintenir la stabilité.
  • BESOIN DE NORMES : si les clients préfèrent des services Web pouvant être qualifiés de "conformes", utilisez les normes. Le seul est le W3C, qui requiert XML, SOAP et WSDL.
3
Peter Krauss

Je pense que WSDL n'est pas approprié pour REST et que WADL n'est pas nécessaire. HTTP expose déjà ce que WADL pourrait décrire dans un fichier séparé. Par exemple, l'en-tête "Autoriser" renvoie la méthode HTTP autorisée et la négociation de contenu permet de choisir le bon format.

1
deamon

WADL n'est pas nécessaire. Toutefois, si le code côté client est déjà présent dans une application et que vous souhaitez effectuer un nouvel appel de repos, il est recommandé d'utiliser wadl pour générer le stub Java côté client (POJO). De cette manière, les POJO côté client seront synchronisés avec les POJO côté service. Par exemple, si vous remplacez un appel de service EJB/SOAP par un appel de service Rest dans une application existante, il est recommandé d'utiliser WADL.

Vous pouvez générer des stubs Java côté client à partir de WADL à l'aide du plug-in wadl2Java maven.

0
R.Ranjan