web-dev-qa-db-fra.com

que sont REST, RESTFul, SOA et microservices en termes simples?

Je pensais savoir ce que REST/"RESTFul", restfulservices, webservices, SOA et microservices étaient, mais je suis tombé sur tellement de définitions différentes que je suis arrivé à la conclusion que ces termes sont surutilisés, mal utilisés ou simplement mal défini.

J'espère avoir une compréhension claire de ce que représentent les termes susmentionnés, de leur définition concrète, de leurs points communs et de leurs différences, de leurs avantages par rapport à leurs inconvénients et, surtout, de la ligne de fond - les choses les plus importantes à retenir pour utiliser ces termes de manière appropriée.

30
Lewix

Avertissement: la plupart de ce message est subjectif. Aucune tentative n'a été faite ici pour définir strictement quoi que ce soit, juste pour contextualiser et donner un aperçu global des concepts et de la façon dont ils sont liés les uns aux autres.

Je pensais savoir ce que REST/"RESTFul", restfulservices, webservices, SOA et microservices

Je dirais que tous ces termes tombent dans le parapluie de Architectures orientées services (SOA). Les services Web sont un SOA utilisant des technologies liées au Web. REST et son sous-ensemble RESTful sont un ensemble de pratiques pour implémenter les services Web. Enfin, les microservices sont un nouvel ensemble de pratiques SOA.

J'espère avoir une compréhension claire de ce que représentent les termes susmentionnés

J'essaierai d'aborder ce point, mais en utilisant des définitions informelles et sans entrer dans les avantages et les inconvénients. Ce serait beaucoup trop long et je pense que les points les plus importants devraient être évidents dans les explications.

[~ # ~] soa [~ # ~]

Je pense que le nom est explicite dans ce cas: SOA - qui signifie Service Oriented Architecture - fait référence aux architectures conçues en mettant l'accent sur les services. Maintenant, la partie délicate ici est ce que vous pouvez considérer ou non comme un service et c'est un tout autre sujet.

Services Web

Cela représente le sous-ensemble de SOA utilisant des technologies Web. Cela implique généralement HTTP et XML, mais il pourrait également utiliser FTP. Je pense que le terme web ici est assez vague car il fait généralement référence aux technologies Internet standard.

REST (ful)

REST est un sous-ensemble de services Web - et donc un SOA - qui tourne autour de l'utilisation de HTTP pour la communication. Il existe un certain ensemble de pratiques courantes telles qu'une certaine pertinence donnée aux URL.

Il y a environ 10 ans, lorsque j'ai découvert REST, RESTful m'a été présenté comme une implémentation REST plus stricte où une ressource aurait un URI unique et serait gérée via des opérations CRUD mappées sur des verbes HTTP - Create = POST, Read = GET, Update = PUT, Delete = Delete.

La mise à jour des informations utilisateur via une requête HTTP GET ou POST sur une URL /users/1/update Serait parfaitement valide dans REST, mais pas RESTful. Pour ce dernier, l'approche serait d'utiliser un HTTP PUT ou PATCH sur /users/1 (Qui serait également l'URL pour le reste des opérations, faisant simplement varier le verbe HTTP).

Je trouve que cette distinction s'est estompée au fil des ans. Cependant, il reste que RESTful est un sous-ensemble plus strict de REST. (Les exigences exactes peuvent être discutables.)

EDIT - Une définition plus formelle:

REST signifie Representational State Transfer et était présenté par Roy Fielding dans sa thèse de doctorat comme un style architectural pour les systèmes hypermédias distribués. L'accent est mis sur l'hypermédia et l'auto-confinement découplant le client de la plupart des connaissances préalables, entre autres. Un site Web en est un exemple: il se compose d'un seul URI (la racine du site Web) et d'un type de support (HTML) à travers lequel le serveur offre toutes les informations dont un client a besoin concernant les ressources et toutes les interactions possibles.

Je dirais que 99% des gens qui parlent de REST veulent vraiment dire interfaces RPC ou HTTP : utiliser des points de terminaison HTTP pour appeler certaines actions ou interroger des données. Se mettant en ligne a essayé de clarifier cela . Toute API formée par un ensemble d'URL prédéfinies attendant certains verbes HTTP et certains paramètres tombe dans ce 99%. Il en va de ma description ci-dessus. Cependant, je doute que le terme lui-même puisse survivre à son utilisation abusive et je pense que nous devons accepter sa nouvelle signification.

Microservices

C'est le terme le plus récent; il promeut l'implémentation d'applications comme un ensemble de services simples et déployables indépendamment. Cela contraste avec l'approche classique des architectures SOA comme un ensemble de services assez complexes utilisés pour construire des systèmes complexes, impliquant typiquement un bus de services d'entreprise. Cependant, il est important de noter que bien que SOA soit généralement associé à de tels systèmes, il s'agit d'un terme plus large et, en fait, les microservices sont également un sous-ensemble de SOA.

Les microservices apparaissent généralement main dans la main avec des piles complètes JavaScript modernes - c'est-à-dire en utilisant JavaScript pour tous les composants verticaux, du serveur à l'interface utilisateur. On peut dire que c'est le cas, car l'utilisation de ces piles complètes JavaScripts peut accélérer le développement grâce à l'intégration simplifiée. Ces piles, et donc les microservices implémentés à l'aide de celles-ci, sont généralement architecturées via REST mais d'un point de vue théorique, rien ne vous empêche d'utiliser une approche différente de la même philosophie.

23
jnovo

Permettez-moi de vous présenter une vue taxonomique de ces termes:

Microservices

sont un sous-type de services spécialisés par responsabilité minimale.

Services Web

sont également un sous-type de services, spécialisés par le type de service qu'ils fournissent et qui correspondent aux exigences et aux besoins du Web.

SOA

est un sous-type d'architectures et donc une vue structurelle de certains composants et de leurs relations, où se trouvent respectivement les services et les communications entre ces services.

du repos

est un sous-type de communication, sous-jacent au protocole http.

reposant

est un sous-type d'architectures (une vue structurelle de certains composants et de leurs relations) où il est spécialisé par les relations entre les composants restreints aux communications de repos.

3
shvahabi