Une architecture orientée services (SOA) est un modèle architectural dans la conception de logiciels informatiques dans lequel les composants d'application fournissent des services à d'autres composants via un protocole de communication, généralement sur un réseau. Les principes d'orientation des services sont indépendants de tout produit, fournisseur ou technologie.
SOA permet simplement aux composants logiciels sur divers réseaux de fonctionner les uns avec les autres.
Les services Web qui sont construits selon l'architecture SOA ont tendance à rendre le service Web plus indépendant. Les services Web eux-mêmes peuvent échanger des données entre eux et, en raison des principes sous-jacents sur lesquels ils sont créés, ils n'ont besoin d'aucune sorte d'interaction humaine et n'ont pas besoin de modifications de code. Il garantit que les services Web d'un réseau peuvent interagir de manière transparente.
La SOA est basée sur certains principes clés mentionnés ci-dessous
- Contrat de service normalisé - Les services adhèrent à une description de service. Un service doit avoir une sorte de description qui décrit en quoi consiste le service. Cela permet aux applications clientes de comprendre plus facilement ce que fait le service.
- Couplage lâche - Moins de dépendance les uns sur les autres. C'est l'une des principales caractéristiques des services Web qui indique simplement qu'il devrait y avoir le moins de dépendance possible entre les services Web et le client qui appelle le service Web. Ainsi, si la fonctionnalité du service change à tout moment, elle ne doit pas interrompre l'application cliente ni l'empêcher de fonctionner.
- Abstraction de service - Les services cachent la logique qu'ils encapsulent du monde extérieur. Le service ne doit pas exposer comment il exécute ses fonctionnalités; il doit simplement indiquer à l'application client ce qu'elle fait et non comment elle le fait.
- Réutilisabilité des services - Logic est divisée en services dans le but de maximiser la réutilisation. Dans toute société de développement, la réutilisation est un sujet important car, de toute évidence, on ne voudrait pas passer du temps et des efforts à créer le même code encore et encore sur plusieurs applications qui en ont besoin. Par conséquent, une fois que le code d'un service Web est écrit, il doit pouvoir fonctionner avec différents types d'applications.
- Autonomie du service - Les services doivent avoir le contrôle sur la logique qu'ils encapsulent. Le service sait tout sur les fonctionnalités qu'il propose et doit donc également avoir un contrôle complet sur le code qu'il contient.
- Apatridie des services - Idéalement, les services devraient être apatrides. Cela signifie que les services ne doivent pas retenir les informations d'un état à l'autre. Cela devrait être fait à partir de l'application cliente. Un exemple peut être une commande passée sur un site d'achat. Maintenant, vous pouvez avoir un service Web qui vous donne le prix d'un article particulier. Mais si les articles sont ajoutés à un panier et que la page Web accède à la page où vous effectuez le paiement, la responsabilité du prix de l'article à transférer sur la page de paiement ne doit pas être assumée par le service Web. Au lieu de cela, cela doit être fait par l'application Web.
- Découvrabilité des services - Les services peuvent être découverts (généralement dans un registre de services). Nous l'avons déjà vu dans le concept de l'UDDI, qui effectue un registre qui peut contenir des informations sur le service Web.
- Composabilité des services - Les services divisent les gros problèmes en petits problèmes. Il ne faut jamais intégrer toutes les fonctionnalités d'une application dans un seul service, mais au lieu de cela, décomposer le service en modules chacun avec une fonctionnalité métier distincte.
- Interopérabilité des services - Les services doivent utiliser des normes qui permettent à divers abonnés d'utiliser le service. Dans les services Web, des normes telles que XML et la communication via HTTP sont utilisées pour garantir sa conformité à ce principe.