Service Oriented Architecture

Annee Academique: 2024-2025 Semestre: 9 (S9) Enseignant: N. Guermouche Categorie: Architectures Logicielles / Services Web


PART A: PRESENTATION GENERALE

Presentation

Le cours d’Architecture Orientee Services (SOA) a constitue une immersion approfondie dans les principes et les pratiques de conception et d’implementation de systemes orientes services. Enseigne par N. Guermouche, ce cours a couvert les architectures de services traditionnelles et modernes, en se concentrant sur la creation de systemes scalables, maintenables et performants.

Le programme s’articulait autour de trois grands axes :

Competences visees


PART B: EXPERIENCE ET CONTEXTE

Details de l’experience

Environnement et Contexte

Ce cours s’est revele particulierement utile dans un contexte ou la demande industrielle pour des systemes distribues et des architectures de services ne cesse de croitre. L’industrie du logiciel migre massivement des architectures monolithiques vers des architectures en microservices, rendant ces competences essentielles pour tout ingenieur en informatique.

Les seances de travaux pratiques m’ont permis d’appliquer les concepts appris en cours a des scenarios concrets, ce qui a ete benefique pour comprendre les differentes methodologies architecturales. Le cours etait structure en progression : des fondamentaux SOA/SOAP vers REST, puis vers les microservices, chaque etape construisant sur la precedente.

Ma Fonction

Dans le cadre de ce cours, j’ai ete responsable de :


PART C: ASPECTS TECHNIQUES

Cette section explore en detail les aspects techniques du cours d’Architecture Orientee Services, acquis principalement lors des travaux pratiques portant sur SOAP, REST et les microservices.

Concepts Techniques

1. Principes fondamentaux de la SOA

L’Architecture Orientee Services repose sur plusieurs principes fondamentaux :

Couplage lache (Loose Coupling) : Les services sont conçus pour minimiser les dependances entre eux. Chaque service peut evoluer independamment sans impacter les autres. Cela favorise la maintenabilite et la flexibilite du systeme global.

Contrats de service : Chaque service expose un contrat formel (WSDL pour SOAP, OpenAPI/Swagger pour REST) decrivant ses operations, ses types de donnees et ses protocoles de communication. Ce contrat sert d’interface entre le fournisseur et le consommateur du service.

Abstraction : Les details d’implementation sont caches derriere l’interface du service. Le consommateur n’a pas besoin de connaitre la logique interne, la base de donnees ou le langage de programmation utilise.

Reutilisabilite : Les services sont conçus pour etre reutilises dans differents contextes et applications. Un service de gestion d’utilisateurs peut etre utilise par plusieurs applications differentes.

Decouverte de services : Les services peuvent etre decouverts dynamiquement via un registre (UDDI pour SOAP, service registry pour microservices), permettant une composition flexible.

2. WSDL - Web Services Description Language

Le WSDL est un langage XML utilise pour decrire les services web SOAP. Il definit quatre elements principaux :

Voici un exemple de fichier WSDL que j’ai etudie et produit en TP, decrivant un service de recherche de livres :

<wsdl:definitions xmlns:tns="http://www.example.org/BookService/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  name="BookService"
                  targetNamespace="http://www.example.org/BookService/">

    <wsdl:types>
        <xsd:schema targetNamespace="http://www.example.org/BookService/">
            <xsd:complexType name="BookType">
                <xsd:sequence>
                    <xsd:element name="title" type="xsd:string"/>
                    <xsd:element name="author" type="xsd:int"/>
                    <xsd:element name="isbn" type="xsd:string"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="book" type="tns:BookType"/>
        </xsd:schema>
    </wsdl:types>

    <wsdl:message name="searchbookIn">
        <wsdl:part name="title" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="searchbookOut">
        <wsdl:part name="book" element="tns:book"/>
    </wsdl:message>

    <wsdl:portType name="Port1">
        <wsdl:operation name="searchBook">
            <wsdl:input message="tns:searchbookIn"/>
            <wsdl:output message="tns:searchbookOut"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="BookWSPortBinding" type="tns:Port1">
        <soap:binding style="document"
                      transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="searchBook">
            <wsdl:input><soap:body use="literal"/></wsdl:input>
            <wsdl:output><soap:body use="literal"/></wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="UnivWS">
        <wsdl:port name="UnivWSPort" binding="tns:BookWSPortBinding">
            <soap:address location="http://localhost:8080/UnivWSApplication/UnivWS"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

J’ai egalement developpe des classes Java correspondant aux types WSDL, comme la modelisation d’un systeme de gestion de cours :

public class CoursType {
    private String intitule;
    private int ects;
    private String nomResponsable;

    public CoursType(String intitule, int ects, String nomResponsable) {
        this.intitule = intitule;
        this.ects = ects;
        this.nomResponsable = nomResponsable;
    }
    // getters et setters
}

3. Protocole SOAP

Le protocole SOAP (Simple Object Access Protocol) est un protocole d’echange de messages structures pour les services web. Il utilise XML pour le formatage des messages et s’appuie sur des protocoles de la couche application tels que HTTP ou SMTP pour la transmission.

La structure d’un message SOAP comprend trois parties :

Requete SOAP : L’enveloppe de requete contient le message SOAP envoye au service web. Par exemple, si la chaine recherchee est “cedric”, l’enveloppe SOAP ressemble a ceci :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:web="http://example.com/webservice">
    <soapenv:Header/>
    <soapenv:Body>
        <web:MyRequest>
            <web:chain>cedric</web:chain>
        </web:MyRequest>
    </soapenv:Body>
</soapenv:Envelope>
Envoi d'une requete SOAP

Envoi d'une requete SOAP depuis un client


Reponse SOAP : La reponse est retournee par le service web apres traitement de la requete. Par exemple, si la reponse retourne 6 (longueur de la chaine) :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:tns="http://www.example.org/BookService/">
    <soapenv:Header/>
    <soapenv:Body>
        <tns:searchBookResponse>
            <tns:book>
                <tns:title>Les Miserables</tns:title>
                <tns:author>123</tns:author>
                <tns:isbn>13.978-2211215350</tns:isbn>
            </tns:book>
        </tns:searchBookResponse>
    </soapenv:Body>
</soapenv:Envelope>
Reception d'une reponse SOAP

Reception d'une reponse SOAP


Les tutoriels SOA nous ont permis de pratiquer deux approches :

4. Services RESTful

REST (Representational State Transfer) est un style architectural qui utilise les methodes HTTP standard pour interagir avec des ressources. Contrairement a SOAP, REST est sans etat (stateless), plus leger et s’appuie sur les standards du Web.

Methodes HTTP :

Methode Action Exemple Description
GET Lecture GET /users/1 Recupere l’utilisateur avec l’ID 1
POST Creation POST /users Cree un nouvel utilisateur
PUT Mise a jour complete PUT /users/1 Remplace l’utilisateur 1
PATCH Mise a jour partielle PATCH /users/1 Modifie partiellement l’utilisateur 1
DELETE Suppression DELETE /users/1 Supprime l’utilisateur 1

Codes de statut HTTP :

Code Signification
200 OK - Requete reussie
201 Created - Ressource creee
204 No Content - Succes sans contenu de retour
400 Bad Request - Requete invalide
401 Unauthorized - Authentification requise
403 Forbidden - Acces refuse
404 Not Found - Ressource non trouvee
500 Internal Server Error - Erreur serveur

HATEOAS (Hypermedia As The Engine Of Application State) : HATEOAS est un principe REST ou les reponses contiennent des liens hypertextes vers les actions disponibles. Cela permet au client de naviguer dynamiquement dans l’API sans connaitre a l’avance les URLs. Par exemple, une reponse pour un utilisateur pourrait inclure des liens vers ses commandes, son profil, etc.

Modele de Maturite de Richardson (RMM) : Le RMM definit quatre niveaux de maturite pour les API REST :

J’ai developpe des services RESTful pour la gestion de commandes en utilisant JAX-RS et JSON pour l’echange de donnees :

public class OrderService {
    private static List<Order> orders = new ArrayList<>();
    private static int idCounter = 1;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Order> getAllOrders() {
        return orders;
    }

    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Order getOrder(@PathParam("id") int id) {
        return orders.stream()
            .filter(order -> order.getId() == id)
            .findFirst().orElse(null);
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Order createOrder(Order order) {
        order.setId(idCounter++);
        orders.add(order);
        return order;
    }

    @PUT
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Order updateOrder(@PathParam("id") int id, Order updatedOrder) {
        for (Order order : orders) {
            if (order.getId() == id) {
                order.setProduct(updatedOrder.getProduct());
                order.setQuantity(updatedOrder.getQuantity());
                return order;
            }
        }
        return null;
    }

    @DELETE
    @Path("/{id}")
    public void deleteOrder(@PathParam("id") int id) {
        orders.removeIf(order -> order.getId() == id);
    }
}

J’ai egalement developpe un controleur REST avec Spring Boot pour la gestion d’utilisateurs :

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User userDetails) {
        return userService.updateUser(id, userDetails);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

Les outils de test comme Postman ont ete utilises pour valider les endpoints, verifier les codes de statut HTTP et inspecter les corps de requete/reponse en JSON.

5. Formats de donnees : JSON, XML et YAML

Les services web utilisent differents formats de serialisation pour l’echange de donnees :

JSON (JavaScript Object Notation) : format leger, lisible et largement adopte pour les API REST.

{
    "id": 1,
    "product": "Laptop",
    "quantity": 3
}

XML (eXtensible Markup Language) : format historique utilise par SOAP, plus verbeux mais avec un schema de validation fort (XSD).

<order>
    <id>1</id>
    <product>Laptop</product>
    <quantity>3</quantity>
</order>

YAML (YAML Ain’t Markup Language) : format lisible souvent utilise pour la configuration (fichiers Spring Boot application.yml, Docker Compose, etc.).

order:
  id: 1
  product: Laptop
  quantity: 3

6. Architecture Microservices

Les microservices representent un style architectural qui structure une application comme un ensemble de services faiblement couples, chacun deployable et scalable de maniere independante.

Patterns de decomposition :

Decouverte de services (Service Discovery) : Dans une architecture microservices, les services doivent pouvoir se trouver mutuellement. Des outils comme Eureka (Netflix) ou Consul (HashiCorp) permettent l’enregistrement et la decouverte dynamique des services.

API Gateway : Un point d’entree unique qui route les requetes vers les microservices appropries. L’API Gateway gere egalement des preoccupations transversales comme l’authentification, le rate limiting et le load balancing.

Dans le cadre du projet, j’ai utilise Spring Boot pour creer plusieurs microservices independants :

Chaque microservice possede son propre fichier pom.xml, sa propre base de donnees et peut etre deploye independamment. La communication entre les services se fait via des appels REST HTTP.

7. Gestion de projet avec Maven

Maven est l’outil de gestion de projet et de build utilise tout au long du cours. Le fichier pom.xml centralise :

Exemple de configuration Maven pour un microservice Spring Boot :

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

8. Workflow Git

Le projet de microservices a ete gere avec Git pour le controle de version. Le workflow collaboratif incluait :

9. Tests unitaires avec JUnit

Les tests unitaires avec JUnit ont permis de valider le bon fonctionnement de chaque composant individuellement. Les tests couvrent les services, les controleurs et la logique metier :

@Test
public void testCreateUser() {
    User user = new User("Cedric", "cedric@insa.fr");
    User created = userService.createUser(user);
    assertNotNull(created.getId());
    assertEquals("Cedric", created.getName());
}

@Test
public void testGetAllOrders() {
    List<Order> orders = orderService.getAllOrders();
    assertNotNull(orders);
}

10. Framework Spring Boot

Spring Boot a ete le framework principal pour le developpement des microservices. Ses avantages cles :


PART D: ANALYSE ET REFLEXION

Connaissances et Competences Mobilisees

Auto-evaluation

L’utilisation de tous les nouveaux concepts appris pendant le cours etait au debut un peu complexe, mais heureusement les tutoriels etaient bien structures, me permettant d’apprendre etape par etape. De plus, il y avait un grand nombre de seances pratiques pour s’exercer et comprendre tous les concepts. N’etant pas habitue a Java, j’ai du reapprendre les bases de ce langage, ce qui a represente un defi supplementaire.

Je n’ai pas beaucoup participe aux TP SOAP car je souhaitais me concentrer davantage sur REST et les microservices en raison de contraintes de temps. Neanmoins, les exercices de modelisation WSDL ont ete tres formateurs pour comprendre la structure formelle des contrats de service.

Le projet de microservices a ete l’element le plus enrichissant du cours. Concevoir une architecture complete avec plusieurs services independants, gerer les communications inter-services et deployer le tout m’a donne une vision concrete de ce qu’implique le developpement d’applications distribuees en production.

La progression pedagogique du cours – des fondamentaux SOA vers SOAP, puis REST, puis les microservices – etait logique et bien construite. Chaque technologie introduisait des concepts qui preparaient a la suivante.

Mon Avis

Avant de suivre ce cours, je n’avais entendu parler que de certains concepts lies a l’architecture orientee services. Grace aux seances de travaux pratiques, j’ai maintenant une bien meilleure comprehension de l’architecture des applications web et de la maniere d’interagir avec elles. Par exemple, simplement en observant le reseau d’un site web et en comprenant toutes les requetes en arriere-plan.

De plus, developper en Java pendant le cours m’a rappele comment coder dans ce langage, ce qui est important car il est tres utilise dans l’industrie. Meme si je prefererais coder en C pour mon avenir professionnel, je peux desormais postuler a des postes Java si necessaire.

La comparaison entre SOAP et REST m’a permis de comprendre pourquoi l’industrie migre vers REST : simplicite, performance et meilleure integration avec les architectures modernes. Cependant, SOAP reste pertinent dans des contextes ou la securite et la fiabilite transactionnelle sont critiques (secteur bancaire, sante).

L’apprentissage des microservices a ete une ouverture vers les pratiques DevOps modernes. La decomposition en services independants facilite le deploiement continu, le scaling horizontal et la resilience des systemes. Ce sont des competences tres recherchees sur le marche du travail.


Documents de Cours

Introduction a la SOA

Cours d'introduction aux principes fondamentaux de l'Architecture Orientee Services : couplage lache, contrats de service, abstraction et reutilisabilite.

Telecharger

Standards WSDL (Partie 1)

Web Services Description Language : structure du WSDL, types, messages, portType et binding.

Telecharger

Standards WSDL (Partie 2)

Approfondissement du WSDL : binding SOAP, exemples avancees et generation de code.

Telecharger

Standards SOAP

Protocole SOAP : structure des messages (Envelope, Header, Body), encodage et transport HTTP.

Telecharger

Introduction a REST

Architecture RESTful : principes, methodes HTTP, ressources et representations.

Telecharger

REST - Formats de Donnees

Formats de serialisation pour les API REST : JSON, XML, YAML et leurs cas d'usage.

Telecharger

REST - Richardson Maturity Model

Modele de maturite de Richardson : les 4 niveaux de maturite REST, de RPC sur HTTP a HATEOAS.

Telecharger

Microservices - Introduction

Introduction aux microservices : definition, comparaison avec monolithique, avantages et defis.

Telecharger

Microservices - Proprietes

Proprietes des microservices : independance, scalabilite, resilience et deploiement continu.

Telecharger

Microservices - Architecture

Patterns architecturaux des microservices : API Gateway, service discovery, decomposition et communication.

Telecharger


Rapports et Projets

Rapport de Projet - Architecture de Services

Ouvrir le Rapport Complet

Rapport de Projet BE

Ouvrir le Rapport de BE

Rapport de TP

Ouvrir le Rapport de TP

Sujet de TP

Ouvrir le Sujet de TP