J'ai lu des articles sur les différences entre SOAP et REST en tant que protocole de communication de service Web, mais je pense que les plus grands avantages de REST sur SOAP sont:
REST est plus dynamique, pas besoin de créer et de mettre à jour UDDI (Universal Description, Discovery, and Integration).
REST n'est pas limité au seul format XML. Les services Web RESTful peuvent envoyer du texte brut / JSON / XML.
Mais SOAP est plus standardisé (ex: sécurité).
Alors, ai-je raison sur ces points?
rest
web-services
http
soap
definition
Abdulaziz
la source
la source
Réponses:
Malheureusement, il y a beaucoup de désinformation et d'idées fausses autour de REST. Non seulement votre question et la réponse de @cmd reflètent celles-ci, mais la plupart des questions et réponses liées au sujet sur Stack Overflow.
SOAP et REST ne peuvent pas être comparés directement, car le premier est un protocole (ou du moins essaie de l'être) et le second est un style architectural. C'est probablement l'une des sources de confusion à ce sujet, car les gens ont tendance à appeler REST toute API HTTP qui n'est pas SOAP.
En poussant un peu les choses et en essayant d'établir une comparaison, la principale différence entre SOAP et REST est le degré de couplage entre les implémentations client et serveur. Un client SOAP fonctionne comme une application de bureau personnalisée, étroitement couplée au serveur. Il y a un contrat rigide entre le client et le serveur, et tout devrait se casser si l'un ou l'autre côté change quelque chose. Vous avez besoin de mises à jour constantes après tout changement, mais il est plus facile de vérifier si le contrat est respecté.
Un client REST ressemble plus à un navigateur. C'est un client générique qui sait utiliser un protocole et des méthodes standardisées, et une application doit s'y adapter. Vous ne violez pas les normes de protocole en créant des méthodes supplémentaires, vous tirez parti des méthodes standard et créez les actions avec elles sur votre type de support. Si cela est fait correctement, il y a moins de couplage et les modifications peuvent être traitées plus gracieusement. Un client est censé entrer dans un service REST sans aucune connaissance de l'API, à l'exception du point d'entrée et du type de support. Dans SOAP, le client a besoin de connaissances préalables sur tout ce qu'il utilisera, ou il ne commencera même pas l'interaction. De plus, un client REST peut être étendu par du code à la demande fourni par le serveur lui-même,
Je pense que ce sont les points cruciaux pour comprendre en quoi consiste REST et en quoi il diffère de SOAP:
REST est indépendant du protocole. Il n'est pas couplé à HTTP. Tout comme vous pouvez suivre un lien ftp sur un site Web, une application REST peut utiliser n'importe quel protocole pour lequel il existe un schéma d'URI normalisé.
REST n'est pas un mappage de CRUD aux méthodes HTTP. Lisez cette réponse pour une explication détaillée à ce sujet.
REST est aussi standardisé que les pièces que vous utilisez. La sécurité et l'authentification dans HTTP sont standardisées, c'est donc ce que vous utilisez lorsque vous effectuez REST sur HTTP.
REST n'est pas REST sans hypermédia et HATEOAS . Cela signifie qu'un client ne connaît que l'URI du point d'entrée et que les ressources sont censées renvoyer les liens que le client doit suivre. Ces générateurs de documentation sophistiqués qui donnent des modèles d'URI pour tout ce que vous pouvez faire dans une API REST manquent complètement le point. Ils documentent non seulement quelque chose qui est censé suivre la norme, mais lorsque vous faites cela, vous associez le client à un moment particulier de l'évolution de l'API, et tout changement sur l'API doit être documenté et appliqué, ou il se cassera.
REST est le style architectural du Web lui-même. Lorsque vous entrez Stack Overflow, vous savez ce qu'est un utilisateur, une question et une réponse, vous connaissez les types de supports et le site Web vous fournit les liens vers ceux-ci. Une API REST doit faire de même. Si nous concevions le Web de la façon dont les gens pensent que REST devrait être fait, au lieu d'avoir une page d'accueil avec des liens vers des questions et réponses, nous aurions une documentation statique expliquant que pour afficher une question, vous devez prendre l'URI
stackoverflow.com/questions/<id>
, remplacez id par le Question.id et collez-le sur votre navigateur. C'est absurde, mais c'est ce que beaucoup de gens pensent que REST est.Ce dernier point ne peut pas être suffisamment souligné. Si vos clients créent des URI à partir de modèles dans la documentation et n'obtiennent pas de liens dans les représentations de ressources, ce n'est pas REST. Roy Fielding, l'auteur de REST, l'a clairement indiqué sur ce billet de blog: les API REST doivent être basées sur l'hypertexte .
En tenant compte de ce qui précède, vous vous rendrez compte que bien que REST ne soit pas limité au XML, pour le faire correctement avec tout autre format, vous devrez concevoir et normaliser un certain format pour vos liens. Les hyperliens sont standard en XML, mais pas en JSON. Il existe des projets de normes pour JSON, comme HAL .
Enfin, REST n'est pas pour tout le monde, et la preuve en est que la plupart des gens résolvent très bien leurs problèmes avec les API HTTP qu'ils ont appelées à tort REST et ne s'aventurent jamais au-delà. REST est parfois difficile à faire, surtout au début, mais il paie au fil du temps avec une évolution plus facile côté serveur et la résilience du client aux changements. Si vous avez besoin que quelque chose soit fait rapidement et facilement, ne vous souciez pas de bien vous reposer. Ce n'est probablement pas ce que vous recherchez. Si vous avez besoin de quelque chose qui devra rester en ligne pendant des années, voire des décennies, REST est fait pour vous.
la source
REST
vsSOAP
n'est pas la bonne question à poser.REST
, contrairement à ceSOAP
n'est pas un protocole.REST
est un style architectural et une conception pour les architectures logicielles basées sur le réseau.REST
les concepts sont appelés ressources. Une représentation d'une ressource doit être apatride. Il est représenté via un type de média. Comprennent quelques exemples de types de médiasXML
,JSON
etRDF
. Les ressources sont manipulées par les composants. Les composants demandent et manipulent des ressources via une interface uniforme standard. Dans le cas de HTTP, cette interface se compose d'opérations HTTP standard par exempleGET
,PUT
,POST
,DELETE
.@ La question d'Abdulaziz éclaire le fait que
REST
etHTTP
sont souvent utilisées en tandem. Cela est principalement dû à la simplicité de HTTP et à sa correspondance très naturelle avec les principes RESTful.Principes fondamentaux de REST
Communication client-serveur
Les architectures client-serveur ont une séparation très distincte des préoccupations. Toutes les applications construites dans le style RESTful doivent également être en principe client-serveur.
Apatride
Chaque demande client au serveur nécessite que son état soit entièrement représenté. Le serveur doit être en mesure de comprendre complètement la demande du client sans utiliser de contexte de serveur ou d'état de session de serveur. Il s'ensuit que tout état doit être conservé sur le client.
Cacheable
Des contraintes de cache peuvent être utilisées, permettant ainsi aux données de réponse d'être marquées comme pouvant être mises en cache ou non. Toutes les données marquées comme pouvant être mises en cache peuvent être réutilisées comme réponse à la même demande ultérieure.
Interface uniforme
Tous les composants doivent interagir via une seule interface uniforme. Étant donné que toutes les interactions entre les composants se produisent via cette interface, l'interaction avec différents services est très simple. L'interface est la même! Cela signifie également que les modifications d'implémentation peuvent être effectuées isolément. De tels changements n'affecteront pas l'interaction fondamentale des composants car l'interface uniforme est toujours inchangée. Un inconvénient est que vous êtes coincé avec l'interface. Si une optimisation peut être fournie à un service spécifique en modifiant l'interface, vous n'avez pas de chance car REST l'interdit. Du côté positif, cependant, REST est optimisé pour le Web, d'où une popularité incroyable de REST sur HTTP!
Les concepts ci-dessus représentent la définition des caractéristiques de REST et différencient l'architecture REST des autres architectures comme les services Web. Il est utile de noter qu'un service REST est un service Web, mais un service Web n'est pas nécessairement un service REST.
Voir ce blog post sur REST Principes de conception pour plus de détails sur REST et les points ci - dessus mentionnées.
EDIT: mettre à jour le contenu en fonction des commentaires
la source
SOAP ( Simple Object Access Protocol ) et REST ( Representation State Transfer ) sont tous deux beaux à leur manière. Je ne les compare donc pas. Au lieu de cela, j'essaie de représenter l'image, quand j'ai préféré utiliser REST et quand SOAP.
Qu'est-ce que la charge utile?
Maintenant, par exemple, je dois envoyer un télégramme et nous savons tous que le coût du télégramme dépendra de quelques mots.
Alors dites-moi parmi les deux messages mentionnés ci-dessous, lequel est le moins cher à envoyer?
ou
Je sais que votre réponse sera la deuxième, bien que les deux représentant le même message soient moins chers en termes de coût.
J'essaie donc de dire que l' envoi de données sur le réseau au format JSON est moins cher que l'envoi au format XML concernant la charge utile .
Voici le premier ou les premiers avantages de REST par rapport à SOAP . SOAP ne prend en charge que XML, mais REST prend en charge différents formats comme le texte, JSON, XML, etc. Et nous savons déjà que si nous utilisons Json, nous serons certainement mieux placés en ce qui concerne la charge utile.
Maintenant, SOAP prend en charge le seul XML, mais il a aussi ses avantages.
Vraiment! Comment?
SOAP s'appuie sur XML de trois manières Enveloppe - qui définit ce qui est dans le message et comment le traiter.
Un ensemble de règles de codage pour les types de données, et enfin la disposition des appels de procédure et des réponses recueillies.
Cette enveloppe est envoyée via un transport (HTTP / HTTPS), et un RPC (Remote Procedure Call) est exécuté, et l'enveloppe est retournée avec des informations dans un document au format XML.
Le point important est que l' un des avantages de SOAP est l'utilisation du transport «générique» mais REST utilise HTTP / HTTPS . SOAP peut utiliser presque n'importe quel moyen de transport pour envoyer la demande, mais REST ne le peut pas. Nous avons donc ici l'avantage d'utiliser SOAP.
Comme je l'ai déjà mentionné dans le paragraphe ci-dessus "REST utilise HTTP / HTTPS" , alors approfondissez un peu ces mots.
Lorsque nous parlons de REST sur HTTP, toutes les mesures de sécurité appliquées HTTP sont héritées, ce qui est connu sous le nom de sécurité au niveau du transport et il sécurise les messages uniquement lorsqu'il est à l'intérieur du câble, mais une fois que vous l'avez remis de l'autre côté, vous ne savez pas combien d'étapes il devra franchir avant d'atteindre le point réel où les données seront traitées. Et bien sûr, toutes ces étapes pourraient utiliser quelque chose de différent de HTTP. Le repos n'est donc pas complètement plus sûr, non?
Mais SOAP prend en charge SSL tout comme REST et prend également en charge WS-Security, qui ajoute des fonctionnalités de sécurité d'entreprise. WS-Security offre une protection de la création du message à sa consommation . Donc, pour la sécurité au niveau du transport, quelle que soit la faille que nous ayons trouvée, elle peut être évitée à l'aide de WS-Security.
En dehors de cela, comme REST est limité par son protocole HTTP, sa prise en charge des transactions n'est donc pas conforme à ACID et ne peut pas fournir de validation en deux phases sur les ressources transnationales distribuées.
Mais SOAP prend en charge à la fois la gestion des transactions basée sur ACID pour les transactions de courte durée et la gestion des transactions basée sur la compensation pour les transactions de longue durée. Il prend également en charge la validation en deux phases sur les ressources distribuées .
Je ne tire aucune conclusion, mais je préférerai un service Web basé sur SOAP alors que la sécurité, la transaction, etc. sont les principales préoccupations.
Voici le "Tutoriel Java EE 6" où ils ont dit qu'une conception RESTful peut être appropriée lorsque les conditions suivantes sont remplies . Regarde.
J'espère que vous avez apprécié la lecture de ma réponse.
la source
REST ( RE présentation S tate T ransfert)
RE présentation S tate d'un objet est T ransferred est REST à dire que nous ne objet pas envoyé, nous envoyons l' état d'objet. REST est un style architectural. Il ne définit pas autant de normes comme SOAP. REST sert à exposer des API publiques (par exemple, Facebook API, Google Maps API) sur Internet pour gérer les opérations CRUD sur les données. REST se concentre sur l'accès aux ressources nommées via une seule interface cohérente.
SOAP ( S œuvre O bjet A ccess P ROTOCOLE)
SOAP apporte son propre protocole et se concentre sur l' exposition des pièces de la logique d'application (pas de données) que des services. SOAP expose les opérations. SOAP se concentre sur l'accès aux opérations nommées, chaque opération implémentant une logique métier. Bien que SOAP soit communément appelé services Web, ce terme est inapproprié. SOAP a très peu sinon rien à voir avec le Web. REST fournit de véritables services Web basés sur les URI et HTTP.
Pourquoi REST?
application/xml
ouapplication/json
pour POST et/user/1234.json
ou GET/user/1234.xml
pour GET.Pourquoi SOAP?
source1
source2
la source
Différence entre le repos et le savon
SAVON
DU REPOS
Pour plus de détails, veuillez voir ici
la source
À mon humble avis, vous ne pouvez pas comparer SOAP et REST où ce sont deux choses différentes.
SOAP est un protocole et REST est un modèle architectural logiciel. Il y a beaucoup d'idées fausses sur Internet pour SOAP vs REST .
SOAP définit le format de message basé sur XML que les applications activées pour les services Web utilisent pour communiquer entre elles sur Internet. Pour ce faire, les applications nécessitent une connaissance préalable du contrat de message, des types de données, etc.
REST représente l'état (en tant que ressources) d'un serveur à partir d'une URL. Il est sans état et les clients ne doivent pas avoir de connaissances préalables pour interagir avec le serveur au-delà de la compréhension de l'hypermédia.
la source
Il y a déjà des réponses techniques, je vais donc essayer de fournir une certaine intuition.
Disons que vous voulez appeler une fonction dans un ordinateur distant, implémentée dans un autre langage de programmation (cela est souvent appelé appel de procédure distante / RPC ). Supposons que cette fonction se trouve à une URL spécifique, fournie par la personne qui l'a écrite. Vous devez (en quelque sorte) lui envoyer un message et obtenir une réponse. Il y a donc deux questions principales à considérer.
Pour la première question, la définition officielle est WSDL . Il s'agit d'un fichier XML qui décrit, dans un format détaillé et strict, quels sont les paramètres, quels sont leurs types, noms, valeurs par défaut, le nom de la fonction à appeler, etc. Un exemple WSDL ici montre que le fichier est humain -lisible (mais pas facilement).
Pour la deuxième question, il existe différentes réponses. Cependant, le seul utilisé dans la pratique est SOAP . Son idée principale est: envelopper le XML précédent (le message réel) dans un autre XML (contenant des informations d'encodage et d'autres trucs utiles), et l'envoyer via HTTP. La méthode POST du HTTP est utilisée pour envoyer le message, car il y a toujours un corps .
L'idée principale de toute cette approche est que vous mappez une URL à une fonction , c'est-à-dire à une action . Donc, si vous avez une liste de clients sur un serveur et que vous souhaitez afficher / mettre à jour / supprimer un, vous devez avoir 3 URL:
myapp/read-customer
et dans le corps du message, passez l'id du client à lire.myapp/update-customer
et dans le corps, passez l'id du client, ainsi que les nouvelles donnéesmyapp/delete-customer
et l'id dans le corpsL'approche REST voit les choses différemment. Une URL ne doit pas représenter une action, mais une chose (appelée ressource dans le jargon REST). Étant donné que le protocole HTTP (que nous utilisons déjà) prend en charge les verbes, utilisez ces verbes pour spécifier les actions à effectuer sur la chose.
Ainsi, avec l'approche REST, le client numéro 12 se trouverait sur l'URL
myapp/customers/12
. Pour afficher les données client, vous appuyez sur l'URL avec une demande GET. Pour le supprimer, la même URL, avec un verbe DELETE. Pour le mettre à jour, encore une fois, la même URL avec un verbe POST et le nouveau contenu dans le corps de la demande.Pour plus de détails sur les exigences qu'un service doit remplir pour être considéré comme vraiment RESTful, voir le modèle de maturité Richardson . L'article donne des exemples et, plus important encore, explique pourquoi un service (soi-disant) SOAP est un service REST de niveau 0 (bien que le niveau 0 signifie une faible conformité à ce modèle, il n'est pas offensant et il est toujours utile dans de nombreux cas).
la source
REST
n'est pas un service Web ?? QuoiJAX-RS
alors ??Parmi beaucoup d'autres déjà couverts dans les nombreuses réponses, je voudrais souligner que SOAP permet de définir un contrat, le WSDL, qui définit les opérations supportées, les types complexes, etc. SOAP est orienté vers les opérations, mais REST est orienté vers les ressources. Personnellement, je choisirais SOAP pour les interfaces complexes entre les applications d'entreprise internes et REST pour les interfaces publiques, plus simples et sans état avec le monde extérieur.
la source
Ajout pour:
++ Une erreur qui est souvent commise à l'approche de REST est de le considérer comme des «services Web avec URL» - de penser à REST comme un autre mécanisme d'appel de procédure à distance (RPC), comme SOAP, mais invoqué via des URL HTTP simples et sans lourdeur de SOAP Espaces de noms XML.
++ Au contraire, REST n'a pas grand-chose à voir avec RPC. Alors que RPC est orienté services et concentré sur les actions et les verbes, REST est orienté ressources, mettant l'accent sur les choses et les noms qui composent une application.
la source
Beaucoup de ces réponses ont complètement oublié de mentionner les contrôles hypermédia (HATEOAS) qui sont complètement fondamentaux pour REST. Quelques autres l'ont abordé, mais ne l'ont pas vraiment bien expliqué.
Cet article devrait expliquer la différence entre les concepts, sans entrer dans les mauvaises herbes sur des fonctionnalités SOAP spécifiques.
la source