Pourquoi devrais-je utiliser REST si je peux faire mon travail avec uniquement des messages et des demandes?
Roy Fielding a blogué avec une certaine frustration sur Les RPC se faisant passer pour REST .
REST exige l'utilisation d'hypertexte, qui évolue très bien car le client et le serveur sont très peu couplés. Avec REST, le serveur est libre de modifier à volonté les ressources exposées. Il n'y a pas d'API fixe au-delà de ce que REST définit lui-même. Le client n'a besoin que de connaître l'URI initial, puis choisit parmi les choix fournis par le serveur pour naviguer ou effectuer des actions. Un serveur peut télécharger du code au client qui facilite la navigation et la représentation de l'état.
Tout cela contraste fortement avec les divers schémas d'appel de procédure distante (RPC) dans lesquels le client et le serveur doivent se mettre d'accord sur un protocole détaillé qui doit généralement être compilé aux deux extrémités (par exemple, les URI d'une forme particulière accessibles dans un ordre particulier) à un extrême, SOAP/WSDL/WS * à l'autre). Cette approche est fragile, car tout changement doit être mis en œuvre à la fois côté serveur et côté client. Il devient rapidement intenable à mesure que le nombre de serveurs et/ou de clients augmente. Les serveurs en particulier souffrent car l'évolution de l'API publiée devient progressivement plus difficile à mesure que la popularité augmente.
À la lumière de ces facteurs, REST est toujours le meilleur choix lorsque cela est possible. Il permet une évolution rapide des serveurs et permet à un nombre astronomique d'applications d'interagir librement sur une base ad hoc (par exemple l'ensemble L'Internet).
Mais qu'en est-il de la partie "quand c'est possible"? REST fonctionne mieux quand il y a un humain dans la boucle. Après tout, un humain a de bonnes chances de pouvoir faire un choix rationnel lorsqu'il est présenté avec un ensemble d'options inconnu auparavant. Les machines ne sont pas n'y sont pas encore. Les protocoles Web RPC sont nés précisément pour menotter les deux côtés à un protocole fixe. Cela permet aux processus automatisés de communiquer plus facilement lorsque l'homme est retiré de l'image. Un RPC est un choix de conception valide lorsqu'une opération purement automatisée est plus important que l'évolution et l'évolutivité (dans le temps Internet et à l'échelle Internet).
Echelle et couplage?
"Échelle" ici est entendu au sens large. Cela comprend le nombre d'utilisateurs et de sessions, oui, mais aussi la taille de l'application et le processus de développement. Un couplage serré présente un sérieux obstacle à la taille de l'application. Il est difficile d'imaginer l'existence de la plus grande application connue, le World-Wide Web, sans le couplage extrêmement lâche offert par l'architecture REST. Des millions de développeurs à travers le monde ont collaboré pour construire cette Cette application prend en charge des milliards d'utilisateurs. Pourtant, les développeurs le font tout en restant parfaitement inconscients les uns des autres (ou du moins ils ne se connaîtraient pas sans StackOverflow;).
Le principe habilitant principal de REST est hypertexte. Les autres éléments de l'architecture existent pour supporter ce principe à très grande échelle (dans tous les sens). Est REST le seul moyen concevable que le Web aurait pu être construit? Non. Mais il se trouve que c'est la norme de facto qui a connu un succès retentissant. Il devrait être le choix par défaut pour toute nouvelle entrée dans l'écosystème, rejeté uniquement après une étude minutieuse et explicite de la conception.
L'utilisation de REST correctement peut aider les composants de votre système à rester correctement découplés et peut évoluer plus facilement à l'avenir que si vous les aviez liés directement les uns aux autres d'une manière typique de type RPC. C'est un choix architectural qui vous devez faire en fonction des besoins de votre application. D'autres ont noté certains des avantages techniques, et ils doivent également être pris en compte.
REST permet une évolution facile d'une conception d'API. Et c'est la clé avec REST - vous créez une API. Certains des commentaires ont touché des aspects de cette pensée, mais n'ont pas réellement donné vie au problème principal. Lorsque vous traitez avec REST, vous créez une API qui serait utilisée par les clients (ou vous-même). Les actions HTTP sur les ressources donnent aux clients une indication claire de la conception et des fonctionnalités de l'API. Par conséquent, lorsque nous utilisons correctement les verbes HTTP appropriés, nous déclarons une API standardisée et compréhensible du point de vue du client.
La découverte est beaucoup plus facile dans REST. Nous avons des documents WADL (similaires à WSDL dans les services Web traditionnels) qui vous aideront à annoncer votre service dans le monde. Vous pouvez également utiliser les découvertes UDDI. Avec le HTTP traditionnel POST et GET, les gens peuvent ne pas connaître vos schémas de demande et de réponse de message pour vous appeler.
Si vos demandes GET
ne sont pas idempotent alors la mise en cache HTTP entre votre serveur et vos clients casserait votre application. Les requêtes POST
ne sont par définition pas idempotentes, donc les caches HTTP ne mettront pas en cache ces requêtes et résultats: vous bénéficiez toujours des avantages de la mise en cache des requêtes GET
, sans casser le protocole de votre application. Grand succès.
Et, si jamais vous avez besoin de supprimer des objets, DELETE
sera beaucoup plus facile à lire sur le fil et les journaux qu'une demande POST
qui effectue la suppression. Mais les navigateurs Web ne peuvent pas facilement faire de requêtes HTTP avec le verbe DELETE
, c'est donc vraiment plus pour les clients que vous avez vous-même programmés.
Vous devez utiliser REST en raison des fonctionnalités et avantages ci-dessous:
Traits
Les avantages
Pourquoi pensez-vous que l'utilisation de POST et GET signifie que ce n'est pas REST?
Le point à REST est que chaque "ressource" a un identifiant de ressource, un URI. Chaque URI potentiellement a GET, POST, PUT, DELETE.
Si vous ne faites pas certaines de ces choses - comme PUT est assez rare et un trou de sécurité potentiel - alors vous ne le faites pas.
Vous devez utiliser REST car il englobe vraiment toutes les actions potentielles que vous souhaitez effectuer sur une ressource/un objet.
Une autre raison est que c'est une norme que tout le monde peut mettre en œuvre et utiliser. Pour lire pourquoi la normalisation est importante, je suggère de lire this et this (c'est plutôt drôle, mais aide vraiment les gens à comprendre le concept de REST).