Avantages et inconvénients de l'architecture RESTful [fermé]

20

La discussion la plus courante que j'ai vue concernant les avantages et les inconvénients de REST tend à encadrer cette discussion par rapport à SOAP. Je n'ai aucune expérience non plus. Je suis actuellement confronté à une décision que mon manque d'expérience me rend difficile à évaluer. Je commence à développer une application qui comprend plusieurs composants - principalement un aspect administratif qui permet au propriétaire d'administrer plusieurs sites - et une interface utilisateur accessible au public qui permet à l'utilisateur d'interagir avec les données détenues sur l'hôte. J'ai besoin d'évaluer les implications de permettre à la dernière partie d'être hébergée n'importe où et de communiquer avec la première via une architecture RESTful - ou d'exiger que les deux composants résident sur le même hôte. Quelles sont les principales implications du développement d'une architecture RESTful, en particulier en ce qui concerne sa capacité dans les domaines suivants:

1: Sécurité 2: Performance 3: Complexité de l'interface

EDIT: En regardant certaines des réponses à cette question - je dois clarifier. Je ne cherche pas une comparaison avec SOAP - plutôt un aperçu des applications REST par rapport aux applications où tous les composants résident sur un hôte. (merci pour ces réponses!)

sunwukung
la source
3
Suggérez de rouvrir. La question est courante et claire avec un éventail raisonnable de réponses possibles.
minghua

Réponses:

13

Compte tenu de ces domaines, je peux donner un aperçu général, mais je ne peux pas tirer vos conclusions pour vous. Il y a deux domaines principaux où les deux protocoles diffèrent:

  • Format du message
  • Découverte de service

Le format des messages est plus facile à comprendre. L'emballage SOAP pour les demandes et les réponses est assez lourd. Il y a l'enveloppe SOAP qui contient à la fois un en-tête et une section de corps. L'en-tête peut être utilisé par plusieurs filtres dans la chaîne de demande pour effectuer une sorte d'identification, d'autorisation, etc. Cependant, XML est coûteux à analyser, ce qui entraîne une certaine pénalité pour l'évolutivité de votre système. Tout dépend de la couche de traitement SOAP dans votre pile.

La découverte de service est l'endroit où vous aurez probablement le plus de conflits. REST, de par sa nature même, fournit des points de terminaison prévisibles et le contenu de la demande est une simple demande HTTP. L'avantage est qu'il n'y a pas de frais généraux supplémentaires, et les utilisateurs finaux peuvent à peu près deviner comment faire ce dont ils ont besoin une fois qu'ils comprennent la structure URL de votre site. Bien sûr, les personnes naïves soucieuses de sécurité verront cela comme une faiblesse. Après tout, avec SOAP, vous devez consommer un WSDL pour savoir quels sont les points de terminaison. Bien sûr, avec SOAP, vous avez reçu l'intégralité du format de message afin que vous puissiez lancer des attaques plus ciblées.

Ventilés par catégories que vous avez données:

Sécurité

Aucun n'est intrinsèquement plus sûr que l'autre. Utilisez de bons principes de sécurité:

  • Chiffrer les communications
  • Assurez-vous d'authentifier et d'autoriser les utilisateurs avant de les traiter
  • Bonnes habitudes de codage pour éviter les attaques directes
  • Et ce n'est que la courte liste.

Souvenez-vous de l'obscurité! = Sécurité.

Performance

Les performances brutes et l'évolutivité iront à REST en raison de la demande suivant des protocoles HTTP simples. La plupart des piles SOAP utilisent l'analyse SAX (analyse basée sur les événements), ce qui améliore considérablement l'évolutivité des piles SOAP, mais il y a un impact mesurable sur la surcharge. SOAP a la surcharge de traitement HTTP normale en plus de la surcharge d'analyse XML. REST a juste la surcharge de traitement HTTP.

Complexité

Du point de vue du système, REST gagne. Il y a moins de pièces mobiles, une chaîne de demande plus légère, etc. Cela signifie qu'il est plus facile de devenir fiable.

Du point de vue du programmeur, SOAP peut gagner si l'IDE ou le framework que vous utilisez fournit un bon support pour cela. Essentiellement, avec REST, il vous incombe d'exécuter le travail de prétraitement (authentification / autorisation / etc.) tandis qu'avec SOAP, une grande partie de cela peut être accompli avec une chaîne de traitement enfichable.

Ma préférence

Je suis très à l'aise avec les requêtes HTTP et je sais comment fonctionne le Web. En conséquence, l'approche REST est plus préférable pour moi. Cependant, je sais que certains de mes clients sont mal à l'aise avec cela. Ils ont lu un article de l'industrie dénonçant la sécurité de REST par rapport à SOAP, etc. En fin de compte, aucune des deux approches ne garantit la sécurité. C'est à vous de vous assurer que l'application est aussi sécurisée qu'elle le devrait. De toute évidence, une application Web sociale n'exige pas (ou ne souhaite pas) autant de sécurité qu'un système bancaire ou gouvernemental. De nombreuses piles SOAP comprennent des processeurs que vous pouvez connecter pour fournir un semblant de sécurité, mais il vous appartient toujours de les rechercher et de les mettre en place.

Berin Loritsch
la source
1
+1 pour une réponse détaillée. Pour une bonne implémentation Java JAX-RS, utilisez RESTEasy. Combiné avec les services Web JAXB devient soudainement trivial.
Gary Rowe
2
"REST, de par sa nature même, fournit des points de terminaison prévisibles et le contenu de la demande est une simple demande HTTP. L'avantage est qu'il n'y a pas de surcharge supplémentaire et les utilisateurs finaux peuvent à peu près deviner comment faire ce dont ils ont besoin une fois qu'ils ont compris le Structure d'URL de votre site. " En fait, cela est contraire à la contrainte HATEOAS de REST ("Hypermedia en tant que moteur d'état d'application") si vous parlez de REST correctement. Il existe un segment de partisans de REST qui vous lynchera pour laisser entendre que la composition d'URL est un aspect de REST. Je ne le ressens pas beaucoup mais beaucoup d'autres le pensent.
MikeSchinkel
1
Et pourtant, la nature prévisible des points de terminaison facilite la conception et la création d'une application. REMARQUE: les cadres prenant en charge les applications REST ont un modèle cohérent d'URL, mais ils ne sont pas nécessairement cohérents d'un cadre à l'autre. Ce modèle régulier d'URL est simplement une question de construction de programmation et de commodité. Les modèles d'URL que vous voyez dans les applications Ruby on Rails sont similaires dans les actions prises en charge, mais les noms sont différents dans ASP.NET MVC.
Berin Loritsch
Faire "la conception par URL" est une mauvaise façon de faire une conception RESTful qui est encouragée par les frameworks car il est facile pour les frameworks de le faire de cette façon. Cependant, il se décompose généralement mal, celui que vous sortez du comportement CRUD normal.
Darrel Miller
12
  1. Sécurité: utilisez HTTPS. Cela s'applique aux deux.
  2. Performance: . REST est moins coûteux en CPU (moins d'analyse, de marshaling, de déballage). En outre, la mise en cache avec REST est un jeu d'enfant.
  3. Complexité: REST demande beaucoup moins en termes de configuration, c'est juste GET / POST après tout. SOAP nécessite beaucoup plus d'administration à maintenir (wsdl, etc.), mais est un peu plus facile si votre IDE le prend en charge.

Je pense que SOAP est beaucoup trop gonflé lorsque vous pouvez faire la même chose avec REST et certains types de contenu / mime. En outre, SOAP apporte beaucoup de frais généraux, en raison de sa nature de wrapper-of-wrappers et du fait qu'il est plus général et non limité à HTTP. SOAP est tentant d'utiliser si votre IDE le prend en charge correctement et que vous ne voulez pas apprendre HTTP. Mais pour moi, REST est beaucoup plus facile à utiliser et beaucoup plus convivial pour le Web.

De nos jours, il existe de très bonnes API REST à utiliser. Si vous aimez Java, alors Jax-RS est vraiment cool. Pour certaines personnes, c'est comme porno.

Martin Wickman
la source
2
+1 car le savon est gonflé. REST est définitivement la voie à suivre. Et ce lien pour JAX-RS montre pourquoi.
Gary Rowe
1
Existe-t-il une bonne pile REST .Net?
BlackICE
@David, RESTful-WCF msdn.microsoft.com/en-us/library/dd203052.aspx
Matthew Whited
8

Je pense que le plus grand avantage de REST est de rompre avec les architectures RPC. REST expose les ressources, pas les processus. Cela vous permet de créer un système faiblement lié, où les changements, les améliorations, voire les défaillances d'une partie ont un impact (négatif) limité sur les autres parties.

Malheureusement, une mauvaise utilisation courante de REST est d'exposer vos structures de données internes (dans le pire des cas, c'est un CRUD de votre base de données, ugh). Cela rend très difficile de le faire en toute sécurité. La «bonne» utilisation consiste à exposer des objets de haut niveau qui sont pertinents pour la partie du système que vous manipulez et à renvoyer généreusement des codes d'état d'erreur en cas d'incohérence.

Une autre partie souvent négligée de REST est l'idempotence de la plupart des verbes. Non seulement GET, mais également PUT et DELETE devraient être exactement le même résultat s'ils sont appliqués une ou plusieurs fois (vous êtes libre de renvoyer un 404 s'il est déjà supprimé, ou de `` pas de changement '' si le client met le même). Cela conduit à des systèmes robustes et à moins d'interdépendance des interprétations exactes de la sémantique.

Javier
la source
1
+1 pour l'idempotence. Je l'ai déjà vu une fois mais je ne l'ai pas trouvé jusqu'à présent. Quelqu'un sait qu'il existe un tutoriel sur la conception reposante en pdf le mentionne?
minghua
3

Les normes WS- * concernent principalement l'exécution de RPC sur SOAP / HTTP. Ainsi, toutes les réflexions qui ont porté sur CORBA et J2EE et leurs prédécesseurs sont pour la plupart passées au même genre de choses en XML. Cela signifie des choses comme les déclarations de type et les contrats de service, l'échange de métadonnées, la sécurité déclarative, etc. Franchement, c'est sur-utilisé même dans l'entreprise.

Les personnes qui construisent une application Web Internet comme la vôtre, auraient certainement intérêt à utiliser une architecture RESTful. Presque toutes les plates-formes peuvent le consommer et le faire simplement et sans se soucier de la version de la spécification que vous utilisez et d'une myriade de bizarreries de conversion de type spécifique à l'outil, etc.

Jeremy
la source
En effet: mon expérience des normes WS- * a été qu'elles sont un exemple glorieux de "normes" où chaque implémentation est différente et incompatible. Restez simple, à mon humble avis, pour les services accessibles au public, et utilisez uniquement SOAP pour les communications privées entre les systèmes fonctionnant sur la même plate-forme.
Carson63000
0

Le seul grand avantage de SOAP par rapport aux implémentations REST actuelles est que SOAP est plus facile à utiliser - la plupart des clients RESTful me demandent de comprendre l'interface et d'écrire un client quelconque. Pour SOAP, je pointe simplement vers wsdl.exe et il génère des classes pour moi.

Wyatt Barnett
la source
1
Avez-vous déjà écrit vous-même un outil d'introspection SOAP? C'est une expérience désagréable qui vous fera passer au REST.
pydanny
1
Non, mais la plupart des plateformes sur lesquelles on regarde SOAP ont dit que des outils d'introspection avaient été construits. Si je cherchais à en construire un ou à me reposer, je ferais le reste.
Wyatt Barnett