Expose les API Web service
Je suis actuellement en train de travailler sur une tâche d'exposer une API comme un service Web. L'idée ici est de paquet de la logique d'entreprise existante dans les fichiers JAR dans un fichier WAR et d'exposer le fichier WAR comme un service Web qui permettrait le retour d'une forme libre, la chaîne XML. Quand on expose une API existante en tant que service Web, est-il suffisant que nous mettons à disposition un XSD & fichier WSDL du retour de la chaîne XML de données? Le fait que la convention ou de la pratique normale?
OriginalL'auteur Subramanian | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Cela dépend si vous êtes ou non à l'aide de SAVON ou de REPOS. Le SAVON est plus restrictive; en conséquence, il est plus probable que vous aurez un fichier WSDL pour générer les classes de l'interface avec l'API.
D'autre part, si vous utilisez REPOS, tout en exposant une bonne URI serait considérée comme suffisante pour répondre à la contrainte d'un service web RESTful avoir une interface uniforme.
RESTE a tendance à de plus en plus de terrain au cours de SAVON, car il est permissive le style architectural. Je préfère cette méthode, et je recommanderais cette méthode si vous êtes nouveau à développer des services web.
En fonction du langage que vous utilisez, je suis en supposant que Java, vous pouvez utiliser Restlets ou au Printemps 3.0 de REPOS du cadre pour vous aider à construire un service web RESTful. Ces outils vraiment rendre votre travail beaucoup plus facile et vous aider à vous conformer à la 6 Contraintes d'un Service Web RESTful et de répondre à la 4 Objectifs Principaux.
Mise à JOUR:
En supposant que vous avez déjà existants, le code orienté objet, et en supposant que vous souhaitez exposer que le code comme une API REST, à l'aide de Spring MVC 3.0, créer un Contrôleur de la sous-classe qui va s'enrouler autour de votre package existant:
Exemple OBTENIR:
Ressource: Javadoc Jackson ObjectMapper POJO/JSON Marshaller
Demande:
Réponse:
XML au lieu de JSON:
La principale différence entre le retour du XML et le retour JSON est dans le marshaller utilisé. À l'aide de javax.xml.bind.les annotations, vous pouvez placer des annotations sur la classe POJO de sorte que le marshaller pouvez le convertir en XML, vous libérer de l'détails de l'avoir à la main le code XML à la main:
À l'aide de javax.xml.bind.les annotations pour convertir des Objets Java pour XML et XSD. Cette ressource explique aussi comment générer le Schéma XML, si vous jugez que comme une exigence à votre service Web REST.
Au lieu d'utiliser le Jackson de l'API de ObjectMapper classe de maréchal de la classe POJO en JSON, utilisez le javax.xml.bind.annotations paquet à la place de ObjectMapper:
Côté des autres ressources, cet article présente quelques exemples d'utilisation de JAXB pour désérialiser une liste de tableaux de POJO objets au format XML.
Ma dernière suggestion lorsque vous travaillez sur le service Web REST wrappers est de définir vos niveaux d'enregistrement pour "TOUS" ou "DEBUG". Je trouve que cela m'aide plus facilement à déterminer la cause racine de tous les problèmes que je face lors de la configuration d'un service Web. Les bibliothèques elles-mêmes de sortie utile messages de débogage pour vous aider à résoudre les problèmes de configuration, tels que les dépendances manquantes, manque d'annotations, et d'autres questions que vous aurez probablement la chance de rencontrer lors de contacts avec la conversion en XML/JSON processus ou dans la configuration de Spring 3.0.
Une fois que vous êtes interfaces uniformes sont d'installation et vous pouvez faire des requêtes GET et de recevoir des réponses, vous pouvez ensuite définir les niveaux de journalisation de retour à la précédente INFO ou AVERTIR les niveaux.
soins à donner un exemple d'exposer une API existante comme un service REST? Vous faire sonner si facile.
Saunders - Le plus facile de sondage, les choses sont souvent les plus difficiles. Mais j'ai vraiment été en mesure de mieux exposer rapidement les services web REST que le SAVON.
donc, il devrait être facile pour vous donner un exemple. Ne vous contentez pas l'affirmer - show.
Merci pour le post. Je sais que c'est tout à fait un certain temps depuis que vous avez écrit cela, mais les liens ont changé, apparemment, et je ne vois pas les 4 Principaux Objectifs dans la page de Wikipedia.
OriginalL'auteur jmort253
Tout d'abord, j'hésiterais avant d'exposer une API existante comme un service web sur un un-pour-un. A l'API existante écrit pour être accessible sur un réseau? Si non, alors il est probablement pas conçu avec la mise en réseau de contraintes à l'esprit.
On peut inclure les appels de méthode qui va impliquer un plus grand nombre de petites opérations - le genre qui ne coûtent rien quand il est utilisé dans un seul et même processus. Sur un réseau, chaque appel est associé à un temps de latence qui est beaucoup plus grande que la surcharge de caling une méthode dans le même processus.
Au lieu de cela, je voudrais concevoir un service pour répondre aux exigences fonctionnelles de l'API. Le service serait susceptible d'être conçu de manière à avoir un plus petit nombre d'opérations, qui effectuent plus de travail par opération, ce qui permet de minimiser les frais généraux associés avec le trafic réseau. Le service serait probablement mis en œuvre en appelant l'API (en supposant qu'il est écrit pour gérer les environnements multi-threads comme un service).
En termes de WSDL, la boîte à outils que vous utilisez peut très bien construire un WSDL pour vous. Je sais que WCF .NET fait ça, et j'ai fait de même à l'aide de IBM Rational Développeur Web, donc je sais que le monde Java peut faire la même chose.
Sinon, ce n'est pas vraiment si difficile de main-d'écrire une WSDL et le schéma correspondant. Dans les deux cas, ils ne doivent être fournis afin que vos clients peuvent utiliser le service.
Il n'y a rien de mal à utiliser le RESTE pour cela, si votre API peut être correctement exprimée comme un ensemble d'opérations sur les ressources. Dans ce cas, oui, fournir le schéma pour le rendre plus facile pour vos clients de traiter le XML. Je méfiez-vous de forcer votre API pour monter le RESTE modèle, s'il n'est pas proprement exprimable que les opérations sur les ressources.
OriginalL'auteur John Saunders