Quels sont les facteurs décisifs dans le choix d'exposer un service Web en tant que service SOAP ou REST?

30

Autant que je sache, la consommation de SOAP nécessite une pile SOAP, il est donc plus difficile pour vos clients de consommer, c'est-à-dire qu'ils doivent s'assurer qu'ils ont une pile SOAP en place qui formate correctement les données POST et les en-têtes et vous en redonne ensuite structure de données, alors qu'avec REST vous faites simplement une requête HTTP GET avec les arguments dans la chaîne de requête et récupérez du texte qui, je suppose, est probablement XML.

Alors, que vous apporte la surcharge / complexité supplémentaire de SOAP, quand en avez-vous besoin et quand pourriez-vous et devriez-vous vous en passer?


la source

Réponses:

17

J'ai déjà implémenté une API REST et j'ai vraiment aimé. En général, lorsque vous implémentez REST sur SOAP, votre client / serveur est plus orthogonal, ce qui signifie que vous pouvez changer le serveur beaucoup plus librement sans affecter vos clients. Cette orthogonalité est due à l'utilisation d'une communication plus abstraite et déjà bien définie via les verbes HTTP. De plus, l'utilisation d'hyperliens intégrés dans vos réponses REST facilite l'extension et la croissance de votre API relativement sans douleur. Les clients sont censés suivre ces liens intégrés pour accéder à de nouvelles ressources comme un humain suivrait des liens sur une page Web pour «explorer» pour plus d'informations.

Cela dit, j'ai eu des collègues à qui on a dit qu'ils devaient utiliser SOAP et ils s'en sont plaints tout le temps. Je suis donc allé dans la recherche des deux un peu plus en détail.

En général, ce que j'ai trouvé est que REST est bien adapté aux applications hautement distribuées , lorsque vous avez des centaines, des milliers ou des millions de clients . L'une des raisons est l'orthogonalité mentionnée ci-dessus, une autre est la mise en cache que vous obtenez gratuitement car vous utilisez HTTP.

SOAP peut être le moyen le plus rapide à suivre lorsque vous avez besoin d'une API plus petite pour un client ou deux rapidement et que vous n'êtes pas trop préoccupé par l'évolutivité. Cela pourrait également vous convenir mieux si vous ne disposez pas d'une architecture structurée autour des ressources , car cela pourrait vous prendre un certain temps pour restructurer votre application pour même pouvoir implémenter REST.

c_maker
la source
2
Vous obtenez la mise en cache à cause du paradigme des ressources et du manque d'état, pas à cause de HTTP.
dietbuddha
@dietbuddha HTTP vous donne la mise en œuvre gratuitement.
Jacob Raihle
17

Il peut s'agir d'un point mineur, mais REST est entièrement basé sur HTTP.

SOAP ne nécessite pas HTTP et vous êtes libre d'utiliser le transport que vous souhaitez.

Les messages SOAP peuvent être routés de manière asynchrone et fiable tandis que REST est à peu près un paradigme synchrone.

REST ne vous dit rien à quoi devraient ressembler les données que vous envoyez et recevez. Il y a WADL, mais vous vous fiez surtout à la documentation de l'API correcte. SOAP possède un cirque de technologies XML pour rendre la description des données moins sujette aux erreurs. WSDL, Schéma ...

À la fin de la journée, REST vous fournit essentiellement un système de fichiers basé sur HTTP. Si votre système peut s'intégrer dans ce paradigme - alors ce pourrait être un bon choix.

sylvanaar
la source
+1 pour avoir mentionné plusieurs transports. Si vous avez vraiment besoin d'un protocole indépendant du transport (qui prend par exemple en charge le fonctionnement via SMTP ou similaire), REST est sorti. Habituellement, HTTP est assez bon, cependant ...
sleske
6
Je ne vois pas comment REST est lié à HTTP? C'est le détail de la mise en œuvre. La plupart des implémentations REST passent par HTTP, mais je ne vois pas pourquoi je ne pouvais pas implémenter REST sur d'autres protocoles, comme FTP.
edalorzo
REST ne limite pas la communication à un protocole particulier ref: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
nmtoken
7

Alors, que vous apporte la surcharge / complexité supplémentaire de SOAP, quand en avez-vous besoin et quand pourriez-vous et devriez-vous vous en passer?

La plus grande différence entre les deux est que REST est supposé être sans état, alors que SOAP ne l'est pas . En pratique, de nombreuses implémentations REST implémentent effectivement un état dans la session via quelque chose comme OAuth.

Une autre différence est que REST est très orienté «ressource» ou nom . Vous interagissez avec les ressources via les opérations CRUD. Tout ce qui ne correspond pas à ce paradigme devient lourd et gênant.

SOAP d'autre part est juste un protocole RPC (appel de procédure distante) . Cela ne vient pas avec un paradigme, c'est juste la couche transport.

Dietbuddha
la source
1
SOAP et REST ne sont que des moyens d'atteindre un résultat final. Ils peuvent ou non convenir à la tâche. Donc, REST peut également être considéré comme une couche de transport. Même la vue état / moins ne tient pas: vous pouvez concevoir les deux versions avec à la fois - et d'autres - types d'API. Vous pouvez même avoir une double API, qui possède à la fois un point de terminaison SOAP et REST. Et un point de terminaison XML-RPC. Et un point de terminaison Apache Thrift. Et un point de terminaison Google Protocol Buffers. Et quoi d'autre. En fin de compte, tout n'est qu'un RPC.
JensG
4

REST utilise également post. En fait, lorsque vous utilisez REST, les verbes http vous indiquent quelle opération se déroule.

REST et SOAP ne sont que des normes différentes de transmission de données sur Internet.

Après avoir utilisé les deux, je recommanderais généralement d'utiliser REST plutôt que SOAP, sauf si vous connaissez les personnes qui vont consommer votre service Web utilisent .net et Visual Studio. Il est généralement beaucoup plus facile de consommer un service Web REST, sauf avec .net VS qui fait la plupart du travail pour vous lorsque vous utilisez SOAP.

Tom Squires
la source
4
Il existe également une bonne prise en charge SOAP en Java.
4

Une chose que je mentionnerais est l'interopérabilité - si vous allez appeler votre service à partir d'une application écrite en .NET et que le serveur est écrit en Java (ou toute autre combinaison), optez pour REST. J'ai vu trop de légères incompatibilités entre les implémentations SOAP pour ne plus y penser.

gbjbaanb
la source
2
Se mettre d'accord. SOAP est standard de l'industrie mais trop complexe, ce qui entraîne des tonnes d'implémentations cassées ou incomplètes. En plus de cela, SOAP a généralement la plus grande empreinte en termes de performances et de trafic par rapport à toute autre approche.
JensG
1

Si vous voulez juste un guide visuel simple pour vous aider à mesurer SOAP et REST par rapport aux exigences de vos applications ...

Vijay Prasad Gupta a élaboré un organigramme simple et utile.

Lien direct vers l'organigramme: https://drive.google.com/file/d/0B3zMtAq1Rf-sdVFNdThvNmZWRGc/edit

Lien vers l'article: https://www.linkedin.com/pulse/20140818062318-7933571-soap-vs-rest-flowchart-to-determine-the-right-web-services-protocol-for-your-needs

JTech
la source
C'est en fait un organigramme assez décent. J'ai été surpris qu'aucune réponse ici ne traite des avantages du SOAP par rapport à REST. Cet organigramme le fait cependant. Je pense que je pourrais inclure l'organigramme sous forme d'image ici au lieu de créer un lien vers celui-ci, juste pour être sûr qu'il colle à la réponse?
jleach
-2

Nous sommes maintenant en 2015. J'aurais espéré que SOAP soit mort, mais il persiste toujours comme une mauvaise odeur. Pour tout sauf les applications "d'exemple" les plus élémentaires, l'intégration à un service SOAP est confrontée à des défis. Il s'agit d'une architecture complexe, avec de nombreuses options à plusieurs niveaux, combinées avec les caprices de multiples implémentations et des incompatibilités subtiles (et pas si subtiles). Je n'ai jamais eu une seule bonne expérience avec ça. REST, en revanche, est un jeu d'enfant: tout le monde comprend HTTP. Dans la plupart des cas, JSON a tellement plus d'utilité que XML InfoSet.

Pour vous donner une idée de la complexité de SOAP, essayez d'intégrer une bibliothèque SOAP dans votre projet. Pour Java, le client Apache Axis2 le plus basique (utilisant une simple liaison de données ADB) utilise 23 nouveaux fichiers JAR. Vingt trois! 20 Mo de ballonnement de bibliothèque. CXF est similaire: 21 JARs, la dernière fois que j'ai compté.

Si vous le vouliez vraiment, vous pouvez faire REST avec une simple bibliothèque HTTP.

Cornel Masson
la source
1
ce lit plus comme une diatribe, voir Comment répondre
moucheron
Tu as raison. Désolé, j'étais inondé de savon à l'époque: D
Cornel Masson
1
Nous avons eu la même plainte avec CORBA / IDL dans les années 90. Puis soudainement "Simple Object Access Protocol" .. ce sera simple! Ce sera cool! Ce sera rapide. Dix ans plus tard, il est considéré comme trop complexe. Viennent ensuite JSON (IMAO vraiment une roue carrée pour les opérations de transfert de données dans les paramètres de laboratoire des étudiants ou des situations de résolution rapide "Je sais ce que je fais") et des opérations RESTful. Rincer, répéter ...
David Tonhofer
J'ai bien peur que chaque vraie déclaration sur SOAP doive être lue comme une diatribe. Il est conçu pour l'entreprise et vous offre des tonnes d'options où vous souhaitez simplement envoyer des données. Concernant les quelques interfaces SOAP avec lesquelles j'ai travaillé, chacune était un gâchis hautement redondant (pas exactement la faute de SOAP, mais l'affinité pour SOAP est en corrélation avec l'affinité pour les bloatwares). Désolé pour les diatribes.
maaartinus