web-dev-qa-db-fra.com

Pourquoi avons-nous besoin de services Web RESTful?

Je vais apprendre les services Web RESTful (il vaut mieux dire que je devrai le faire car cela fait partie du programme de maîtrise CS).

J'ai lu des informations dans Wikipedia et un article sur REST sur Sun Developer Network et je vois que ce n'est pas une technologie facile, il existe des cadres spéciaux pour la création d'applications RESTful et il est souvent comparé à SOAP les services Web et le programmeur doivent comprendre quand utiliser SOAP et quand REST pourrait être une approche intéressante) .

Je me souviens qu'il y a plusieurs années SOAP était très populaire (à la mode?) Et que l'élément 'SOAP' devait figurer dans chaque bon CV. Mais dans la pratique, il était utilisé très rarement et pour obtenir des résultats très simples. fins.

Il me semble que REST est un autre "dernier mot de la mode" (ou je peux être totalement faux car je n'ai jamais vu REST en pratique) .

Pouvez-vous me donner quelques exemples: REST devrait être utilisé et pourquoi nous ne pourrions pas faire la même chose sans REST (ou pourquoi nous devrions passer beaucoup plus de temps à faire la même chose sans REST)?

UPD : Malheureusement, je ne vois pas d'arguments concrets qui me surprennent dans les premiers commentaires. Me faire penser que REST est une technologie géniale!

J'aimerais voir des réponses comme celle-ci:

Je développais une autre application HelloWorld complexe et nous devions transférer beaucoup de données minuscules et j'ai proposé la solution REST à mon collègue):

- Oh putain! Jonny, nous devrions certainement utiliser REST pour implémenter cette application!
- Oui, Billy, nous pouvons utiliser REST, mais nous ferions mieux d'utiliser SOAP. Faites-moi confiance car je sais quelque chose sur le développement d'applications HelloWorld.
- Mais SOAP est une technologie ancienne du siècle dernier et nous pouvons en utiliser une meilleure.
- Billy, êtes-vous prêt à passer 3 jours à expérimenter avec REST? Nous pouvons le faire avec SOAP en 2 heures ..
- Oui, je suis sûr que nous passerons encore plus de temps à atteindre la même sécurité/performance// évolutivité/quoi que ce soit d'autre avec SOAP. Je suis sûr que les applications HelloWorld ne devraient être développées qu’avec REST à partir de maintenant.

120
Roman

REST doit être utilisé s'il est très important pour vous de minimiser le couplage entre les composants client et serveur dans une application distribuée.

Cela peut être le cas si votre serveur doit être utilisé par de nombreux clients différents sur lesquels vous n'avez pas le contrôle. Cela peut également être le cas si vous souhaitez pouvoir mettre à jour le serveur régulièrement sans avoir à mettre à jour le logiciel client.

Je peux vous assurer qu’atteindre ce faible niveau de couplage n’est pas facile . Il est essentiel de respecter toutes les contraintes de REST pour réussir. Il est difficile de maintenir une connexion purement sans état. Choisir les types de média appropriés et compresser vos données dans les formats est délicat. Créer votre propre les types de médias peuvent être encore plus difficiles.

L'adaptation du comportement de serveur enrichi à l'interface HTTP uniforme peut être source de confusion et semble parfois pédante par rapport à l'approche RPC relativement simple.

Malgré les difficultés, vous bénéficiez d'un service qu'un développeur client devrait pouvoir comprendre facilement en raison de l'utilisation cohérente du protocole HTTP. Le service doit être facilement identifiable grâce à l'hypermédia et le client doit être extrêmement résistant aux modifications du serveur .

Les avantages de l'hypermédia et l'évitement de l'état de session facilitent l'équilibrage de charge et le partitionnement de services . La stricte conformité aux règles HTTP rend la disponibilité d'outils comme les débogueurs et les proxies de mise en cache chose merveilleuse.

Mettre à jour

Il me semble que REST est un autre "dernier mot de la mode" (ou je peux être totalement faux car je n'ai jamais vu REST en pratique) .

Je pense que REST est devenu à la mode parce que les gens qui tentent de faire SOA ont découvert que l'utilisation de la pile SOAP qu'ils sont Les gens continuent à utiliser Internet comme exemple de simples méthodologies d’intégration. Malheureusement, je pense que les gens sous-estiment la quantité de planification et de prospective qui a été consacrée à la création d’Internet et ils simplifient à l'excès les tâches à accomplir. autoriser le type de réutilisation fortuite qui se produit sur le Web.

Vous dites que vous n'avez jamais vu REST en pratique, mais cela ne peut pas être vrai si vous utilisez un navigateur Web. Le navigateur Web est un client REST .

  • Pourquoi n'avez-vous pas besoin de mettre à jour votre navigateur lorsque quelqu'un modifie du code HTML sur un site Web?
  • Pourquoi puis-je ajouter un nouvel ensemble complet de pages à un site Web et le "client" peut toujours accéder à ces nouvelles pages sans mise à jour?
  • Pourquoi n'ai-je pas besoin de fournir un "langage de description de service" au navigateur Web pour l'indiquer lorsqu'il passe à http://example.org/images/cat que le type de retour sera une image jpeg et que vous irez à http://example.org/description/cat le type de retour sera text/html?
  • Pourquoi puis-je utiliser un navigateur Web pour visiter des sites qui n'existaient pas au moment de la publication du navigateur? Comment le client peut-il connaître ces sites?

Celles-ci peuvent sembler des questions stupides, mais si vous connaissez la réponse, vous pouvez alors commencer à voir ce que REST est tout au sujet. Regardez StackOverflow pour plus d'avantages de REST. Quand je regarde un question, je peux créer un signet sur cette page ou envoyer l'URL à un ami et il peut voir les mêmes informations. Il n'a pas à naviguer sur le site. pour trouver cette question.

StackOverflow utilise divers services OpenId pour l’authentification, gravatar.com pour les images d’avatar, Google-Analytics et Quantserve pour des informations analytiques. Ce type d’intégration multi-entreprises est le type de chose que le monde SOAP ne rêve que de . L'un des meilleurs exemples est le fait que les bibliothèques jQuery utilisées pour gérer l'interface utilisateur StackOverflow sont extraites du réseau de diffusion de contenu de Google. Le fait que SO puisse demander au client (c'est-à-dire votre navigateur Web) de télécharger le code d'un site tiers pour améliorer les performances témoigne du faible couplage entre le client Web et le serveur.

Voici des exemples d'architecture REST au travail).

Maintenant, certains sites Web/applications enfreignent les règles de REST et le navigateur ne fonctionne pas comme prévu.

  • Le fameux problème de bouton retour est dû à l'utilisation de l'état de session côté serveur.
  • L'équilibrage de la charge peut devenir un problème lorsque vous avez l'état de session côté serveur.
  • Les applications Flash empêchent souvent l’URL d’identifier spécifiquement une représentation.
  • L'autre problème qui casse les navigateurs Web est la mauvaise conformité aux normes de type de média. Nous entendons tout le temps parler de la nécessité de tuer IE6. Le problème, c'est que les normes n'ont pas été correctement suivies ou ont été ignorées pour une raison quelconque.
  • L'utilisation de sessions de connexion est à l'origine de nombreuses failles de sécurité.

Le reste est partout. C'est la partie du Web qui fait que ça fonctionne bien. Si vous souhaitez créer des applications distribuées qui peuvent évoluer comme le Web, soyez résilients face au changement comme le Web et encouragez la réutilisation comme le Web l’a fait, suivez les mêmes règles que lors de la création de navigateurs Web.

132
Darrel Miller

À ma connaissance, le mémoire de Roy Fielding a donné le coup d'envoi à REST Styles architecturaux et conception d'architectures logicielles basées sur un résea , qui vaut la peine d'être lu si vous ne l'avez pas examiné.

En haut de la thèse se trouve une citation:

Presque tout le monde se sent en paix avec la nature: écouter les vagues de l'océan contre le rivage, au bord d'un lac immobile, dans un champ d'herbe, sur une lande balayée par le vent. Un jour, lorsque nous aurons retrouvé le moyen hors du temps, nous ressentirons la même chose à propos de nos villes et nous nous sentirons aussi en paix en elles que nous le faisons aujourd'hui au bord de l'océan ou étendues dans l'herbe longue d'un Prairie.

- Christopher Alexander, La méthode de construction intemporelle (1979)

Et ça résume vraiment là-haut. REST est à bien des égards plus élégant.

SOAP est un protocole au-dessus de HTTP. Il contourne donc de nombreuses conventions HTTP pour en créer de nouvelles. Il est redondant à plusieurs égards avec HTTP. HTTP, cependant, est plus que suffisant pour récupérer, rechercher, écrire et supprimer des informations via HTTP, et c’est beaucoup de ce que REST est. Parce que REST est construit avec HTTP plutôt que dessus, cela signifie également que les logiciels qui veulent s’intégrer à celui-ci (comme un navigateur Web) n’ont pas besoin de comprendre SOAP pour le faire, il suffit de HTTP , qui doit être le protocole le plus largement compris et intégré - avec le protocole utilisé à ce stade.

10
quillbreaker

De ici :

Avantages REST:

  • Léger - pas beaucoup de balises XML supplémentaires
  • Résultats lisibles par l'homme
  • Facile à construire - aucune boîte à outils requise

Vérifiez également this out:

Pour être juste, REST n'est pas la meilleure solution pour tous les services Web. Les données qui doivent être sécurisées ne doivent pas être envoyées sous forme de paramètres dans les URI. Et de grandes quantités de données, comme cela dans les détails Les bons de commande peuvent rapidement devenir encombrants, voire dépasser les limites, dans un URI. Dans ces cas, SOAP est effectivement une solution solide. Mais il est important d'essayer REST = first et recours à SOAP uniquement lorsque cela est nécessaire. Cela permet de garder le développement d'applications simple et accessible.

9
Ionut Anghelcovici

Je peux affirmer en toute sécurité que j'ai passé beaucoup de temps à comprendre cela en tant que débutant, mais c'est le meilleur lien pour commencer REST à partir de zéro! http: //www.codeproject .com/Articles/21174/Tout-sur-REST-Web-Services-Quoi-et-Comment-Comment

Juste pour te tirer dedans,

Pensez à ce qu'est un "service Web traditionnel". C'est une interface avec des "méthodes" exposées. Les clients connaissent le nom, l'entrée et la sortie des méthodes et peuvent donc les appeler.

Imaginons maintenant une interface qui n'expose pas les "méthodes". Au lieu de cela, il expose des "objets". Ainsi, lorsqu'un client voit cette interface, il ne voit qu'un ou plusieurs "objets". "Un objet" n'a ni entrée ni sortie - car "il ne fait rien". C'est un nom, pas un verbe. C'est "une chose", pas "une action".

Par exemple, pensez à un service Web traditionnel qui fournit les conditions météorologiques actuelles si vous le fournissez avec une ville. Il a probablement une méthode Web telle que GetWeatherInfo () qui prend une ville en entrée et fournit des données météorologiques en sortie. Jusqu'à présent, il vous est facile de comprendre comment un client utilisera ce service Web.

Maintenant, imaginez qu’à la place du service Web ci-dessus, il en existe un nouveau qui expose les villes en tant qu’objets. Ainsi, lorsque vous le considérez en tant que client, au lieu de GetWeatherInfo (), vous voyez New York, Dallas, Los Angeles, Londres, etc. Et ces villes n’ont pas de méthodes spécifiques à leur application - elles sont apparemment comme des gaz inertes - elles-mêmes ne réagissent pas.

Vous devez penser - eh bien, en quoi cela vous aide-t-il, en tant que client, à connaître le climat de Dallas? Nous y arriverons dans quelques instants.

Si tout ce que vous obtenez d'un service Web est un "ensemble d'objets", vous avez évidemment besoin d'un moyen "d'agir en conséquence". Les objets eux-mêmes ne peuvent pas être appelés par des méthodes. Vous avez donc besoin d'un ensemble d'actions que vous pouvez appliquer à ces objets. En d'autres termes, vous devez "appliquer un verbe au nom". Si vous voyez un objet, par exemple une pomme, qui est "un nom", vous pouvez lui appliquer "un verbe" comme manger. Mais tous les verbes ne peuvent pas être appliqués à tous les noms. Par exemple, vous pouvez conduire une voiture, mais pas une télévision.

Ainsi, si un service Web n’expose que des objets et qu’il vous est demandé, concevons maintenant quelques actions ou verbes standard que "tous les clients peuvent s’appliquer à tous les objets qu’ils voient", ...

Voici quelques idées:

  • REST contraint votre service à utiliser une interface uniforme. Vous n'avez pas à perdre du temps à rêver (ou à vous disputer) de toutes les manières dont votre service pourrait fonctionner - vous devez travailler à identifier les ressources de votre système. Cela s'avère être un gros travail en soi, mais heureusement, les problèmes ont tendance à être beaucoup mieux définis.
  • Avec les ressources, leurs associations et leurs représentations en main, il y a vraiment très peu à faire dans la mise en œuvre de votre service car de nombreuses décisions ont été prises pour vous.
  • Votre système ressemblera beaucoup aux autres systèmes RESTful; les courbes d'apprentissage pour les coéquipiers, les partenaires et les clients seront réduites.
  • Vous aurez un vocabulaire commun pour discuter des problèmes de conception avec d’autres développeurs, et même avec des concepteurs moins avisés (tels que les clients).
  • Comme Darrel le dit, comme vous utilisez une conception basée sur l'hypertexte , votre service réduit la portée du couplage à une seule chose: les types de média. Cela vous aide en tant que développeur, car les modifications apportées à votre système sont contenues dans une bande de contacts étroite. Cela aide vos clients car moins de vos modifications vont casser leur code.
  • Presque tous les problèmes que vous pourriez rencontrer en implémentant REST peuvent être résolus en exposant une nouvelle ressource ou en repensant votre modèle de ressource. Cet objectif est, IMO, un gros coup de pouce pour la productivité.

En fin de compte, REST supprime le processus de votre équipe les décisions les plus fastidieuses en termes de conception et d’implémentation. Il déplace votre attention de la mise en œuvre votre service pour le concevoir et cela sans empiler gobbledygook sur le protocole HTTP.

4
Rich Apodaca

La plupart des réponses "pro" à propos de REST semblent provenir de personnes qui n’ont jamais mis au point un service Web SOAP ou un client utilisant un environnement fournissant les outils appropriés à cette fin). Ils se plaignent de problèmes que je n’ai tout simplement jamais rencontrés, à l’aide de Visual Studio .NET et de Rational Web Developer d’IBM. Je suppose que si vous devez développer des services Web ou des clients dans un langage de script, ou dans un autre langage avec peu ou pas de langage. aucun outil de soutien, que ce sont des plaintes valides.

Je dois également admettre que plusieurs points "pro" semblent être vraisemblablement vrais, mais que je n’ai jamais vu d’exemple illustrant leur valeur. En particulier, j'apprécierais beaucoup que quelqu'un poste un commentaire contenant un lien vers un bon exemple de service Web REST. Il devrait s'agir d'un service utilisant plusieurs niveaux de ressources, éventuellement dans une hiérarchie, et qui utilise correctement les types de média. Peut-être que si je regarde un bon exemple, je comprendrai, dans ce cas, je reviendrai ici et l’admettrai.

4
John Saunders

Pour ajouter une réponse légèrement prosaïque aux réponses déjà données, nous utilisons les services REST) où je suis, si vous savez que vous pouvez donner à un partenaire commercial une URL et savoir qu'il recevra, en retour, une dalle XML bien agencée, qu’ils travaillent en .Net xx, PHP, Python, Java, Ruby ou dieu sait ce qu’elle réduit considérablement les maux de tête.

Cela signifie également que, du côté technique, nos commerciaux peuvent se vanter de notre API polyvalente auprès de personnes ne craignant pas de ressembler à des muppets complets.

Outre les avantages techniques, il est facile pour un non-spécialiste d'expliquer, de démontrer et de se sentir confiant. SOAP, bien que tout aussi cool pour les technophiles, est beaucoup moins accessible aux non-technophiles et n'est donc pas aussi facile à "vendre".

J'ai tendance à remarquer que les choses que les non-techniciens peuvent maîtriser ont tendance à coller. Donc, je doute que REST en tant que technique puisse être aussi sensible que SOAP aux caprices de la mode.

Mais tout ce qui concerne le fait de ne rien mettre dans un service qui devrait être verrouillé REST) est tout aussi vrai, ne serait-ce que parce que la technologie est si facilement comprise par des personnes qui n'ont pas l'esprit technique.

3
One Monkey

REST est un style d'architecture pour la conception d'applications en réseau. L'idée est que, plutôt que d'utiliser des mécanismes complexes tels que CORBA, RPC ou SOAP pour se connecter entre des machines, un simple HTTP est utilisé pour passer des appels entre des machines.

À bien des égards, le World Wide Web lui-même, basé sur HTTP, peut être considéré comme une architecture basée sur REST. Les applications RESTful utilisent des requêtes HTTP pour publier des données (créer et/ou mettre à jour), lire des données (par exemple, effectuer des requêtes) et supprimer des données. Ainsi, REST utilise HTTP pour les quatre opérations CRUD (Créer/Lire/Mettre à jour/Supprimer).

REST est une alternative légère aux mécanismes tels que les appels de procédure distante (RPC) et les services Web (SOAP, WSDL, etc.). Nous verrons plus tard combien est plus simple REST est.

En dépit de sa simplicité, REST est complet; vous ne pouvez absolument rien faire dans les services Web avec une architecture RESTful. REST est pas un "standard". Il n'y aura jamais de recommandation du W3C pour REST, par exemple. Bien qu'il existe REST cadres de programmation, travailler avec REST l'est simple que vous puissiez souvent "rouler vous-même" avec les fonctionnalités de bibliothèque standard dans des langages tels que Perl, Java ou C #.

3
Karthick Kumar