web-dev-qa-db-fra.com

Différence entre REST et les services Web

Quelle est la différence entre REST et WebService (SOAP), j'ai regardé l'api facebook, ils utilisent des en-têtes HTTP et certains paramètres (probablement xml ou non) et retournent le résultat en xml, où d'autre SOAP fait exactement la même chose, en-têtes HTTP + paramètres xml et retourne en-têtes + xml.

REST nécessite également un jeton authentifié où SOAP utilise une session http qui est exactement le même jeton utilisé pour l'authentification et d'autres informations. Tout ce que je peux voir, c'est que SOAP est une petite version avancée de REST?

Ou y a-t-il d'autres considérations de performances? La lecture de REST ne fait que parler d'un niveau très élevé de communication client-serveur, mais même SOAP fait exactement la même chose. Quelqu'un peut-il m'indiquer où il peut définir la limite correcte de REST et SOAP.

Nous utilisons beaucoup de SOAP de manière transparente dans .net, mais je veux juste savoir s'il vaut vraiment la peine de porter une attention à REST où actuellement tout se déroule remarquablement bien.

Je sais que REST est une architecture et SOAP est un protocole mais ma question est en détail qui est actuellement l'implémentation ASP.NET WebService de SOAP a REST architecture?

57
Akash Kava

SOAP est un protocole d'envoi/réception de données via HTTP au format XML.

Un WebService typique comprendra quelques méthodes d'un WSDL qui décrivent comment l'appeler. Il n'y a pas de véritable convention sur la façon dont ceux-ci doivent être structurés, vous avez donc toujours besoin de beaucoup de documentation API.

En général, ce sera quelque chose comme (pour ASP.NET):

  • HTTP POST to mysite.com/products.asmx/ListAllProducts - renvoie la liste XML des produits
  • HTTP POST à mysite.com/products.asmx/GetProduct - renvoie XML pour le produit basé sur SOAP XML dans le contenu publié)
  • HTTP POST à mysite.com/products.asmx/UpdateProduct - modifie le produit en fonction de SOAP XML dans le contenu publié)

REST est plus une convention pour structurer toutes vos méthodes:

  • HTTP GET from mysite.com/products - retourne XML ou JSON listant tous les produits
  • HTTP GET from mysite.com/products/14 - retourne XML ou JSON pour le produit 14
  • HTTP POST to mysite.com/products/14 - remplace le produit 14 par ce que vous publiez dans le formulaire HTML.
  • HTTP DELETE à mysite.com/products/14 - supprime le produit 14
  • HTTP PUT to mysite.com/products - ajoute un nouveau produit

Donc REST fonctionne plus comme vous vous attendez à ce que les URL de navigateur le fassent. De cette façon, il est plus naturel et en tant que convention est beaucoup plus facile à comprendre. Toutes les API REST travailler de manière similaire, donc vous ne passez pas autant de temps à apprendre les bizarreries de chaque système.

70
Keith

Pour moi, un service implémenté à l'aide d'une approche RESTful l'emporte sur celui qui utilise SOAP ou RPC en termes d'accessibilité. Dans un système relativement fermé où des outils sont disponibles pour générer des stubs et des liens basés sur un WSDL , ce n'est pas très important. Cependant, si vous voulez créer des services accessibles et disponibles pour un large éventail de clients, l'uniformité des services REST et la facilité avec laquelle ils peuvent être consommés) est un gros plus, c'est-à-dire que vous n'avez pas besoin d'une pile RPC lourde, juste la possibilité de faire des requêtes HTTP.

Je ne suis pas sûr que cela réponde totalement à votre question, mais si, comme vous le dites, vous avez un système qui fonctionne sur la base de SOAP (et vous contrôlez le client et le serveur), alors je ne vois aucune raison De plus, certains services se prêteront naturellement plus à un accès basé sur RPC, auquel cas une interface SOAP sera plus appropriée.

En termes de performances, une ou plusieurs couches seraient effectivement supprimées des piles technologiques client et serveur si vous n'utilisez pas SOAP, donc toutes choses étant égales par ailleurs, un service qui expose une interface RESTful y gagnera.

13
Andy