2013-09-01 6 views
18

SOAP sur HTTP un sous-ensemble de XML sur HTTP depuis que je suppose SOAP aussi un xml qui confirme à un schéma (schéma SOAP)? Je suppose que le service XML sur HTTP peut être accédé en utilisant la méthode GET ou POST. Est-ce que SOAP sur HTTP utilise toujours la méthode POST? Dans le cas de XML sur HTTP, je suppose que l'inconvénient est que le fichier de schéma doit être partagé avec tous les consommateurs alors que dans le cas de SOAP sur HTTP, il s'agira d'un seul fichier WSDL. Serait-il possible d'aider à me faire connaître la différence et aussi l'avantage de l'un sur l'autre?Différence entre XML sur HTTP et SOAP sur HTTP est

Répondre

21

SOAP est une spécialisation de XML, car il a un schéma, comme http://www.xmlsoap.org/soap/envelope/, alors que XML est plus général. Pour utiliser GET, vous pouvez lire cette discussion: http://www.coderanch.com/t/463869/Web-Services/java/SOAP-request-HTTP, mais fondamentalement SOAP est fait via POST, bien que Axis2 semble avoir le support de GET, comme un moyen de faire fonctionner SOAP dans un monde où REST semble gouverner.

Et, selon cet article IBM (http://www.ibm.com/developerworks/xml/library/x-tipgetr/index.html) SOAP 1.2 GET introduit. Comme vous l'avez mentionné, SOAP est un standard, donc il y a des outils qui peuvent facilement fonctionner avec, y compris la génération dynamique de client, comme montré dans cette question, dynamic proxy soap web service client in java?, où le client génère les stubs nécessaires lors de la connexion. Si vous utilisez XML sur http, il peut être préférable, selon le besoin, de transférer des données, mais dans les cas d'utilisation, il semblerait préférable de simplement utiliser JSON et REST, mais, Si vous voulez transférer du XML ou envoyer du XML, vous pouvez utiliser REST. POST est la meilleure option, car GET a des limitations de taille (maximum length of HTTP GET request?), ce qui est probablement la raison pour laquelle SOAP est presque toujours POST.

Le WSDL est pas nécessairement un seul fichier, dans WCF, si je me souviens, il y a beaucoup de fichiers XML qui doivent être mis en place pour le WSDL pour être complet. L'avantage dépend de ce que votre cas d'utilisation est, mais je trouve que l'utilisation REST et permettant à l'utilisateur de sélectionner le type est utile car il peut être trivial de basculer entre JSON et XML, par exemple, et est le meilleur choix pour XML sur HTTP.

SOAP est préférable lors de l'intégration des technologies plus anciennes comme cela peut être tout ce qu'ils peuvent facilement utiliser. Par exemple, quand j'ai fait des webservices pour l'intégration de SAP, il peut être plus difficile de ne pas utiliser SOAP, en fonction de la capacité du programmeur ABAP.

Vous trouverez peut-être cette question d'utilisation:

How SOAP and REST work with XML/JSON response?

et pour une discussion à propos de JSON et XML dans webservices vous trouverez peut-il été utile:

http://digitalbazaar.com/2010/11/22/json-vs-xml/

J'ai oublié ce lien , comme ils font une brève comparaison, mais à la fin, vous pouvez facilement soutenir les deux. Dans WCF, j'avais un contrôleur qui avait la logique métier, et avait des fichiers .aspx, un pour SOAP et un pour REST, et certains services web supportaient les deux, car il s'agissait juste de gérer les différences de requête et de réponse. Donc, si vous voulez fournir un soutien pour les deux, et avoir une analyse de rentabilisation montrant qu'il est logique, alors choisissez un cadre qui le rendra facile à faire.

http://digitalbazaar.com/2010/11/22/json-vs-xml/

Fondamentalement, l'objectif est de fournir des services aux clients via le web. Quels clients vont se connecter? Comment les clients trouveront-ils le plus facile d'atteindre? Combien de données sont transmises dans la demande? Ces types de questions mèneront à la meilleure solution pour vos besoins.

+0

Merci beaucoup. Explication très utile et détaillée qui a effacé ma confusion :) –

+0

S'il vous plaît, je voudrais savoir comment les requêtes SOAP sont envoyées via HTTP POST. L'enveloppe entière est-elle enregistrée brute dans le corps de la requête, de manière à pouvoir être lue entièrement dans une chaîne avec l'appel de méthode suivant? 'String entierSoapReequest = IOUtils.toString (request.getInputStream());' –

+1

@SayoOladeji - Il existe des outils de savon qui aideront mais si je me souviens que tout est dans le corps de la demande, mais pour savoir vous pouvez demander ceci comme une nouvelle question –

Questions connexes