UP | HOME

Services - Exercices

Table of Contents

1 Corrélation

Comme la causalité, la corrélation exprime la préservation d'une propriété liée au temps logique : au lieu de préserver l'ordre causal, on préserve la corrélation au sens suivant. Si des requêtes sont produites simultanément, alors leurs réponses seront traitées simultanément : autrement dit, si des requêtes sont corrélées, alors leurs réponses le seront.

Voici l'exemple d'un mashup. On définit un service en agrégeant deux services. Les réponses des requêtes aux deux services doivent être corrélées. Pour ce faire, on utilise une représentation du temps logique par un compteur.

Service 1 : météo locale présente

  • Canal : getMeteo(lieu, k, t)
  • Règle :

    getMeteo(lieu, k, t) -> k(t, meteo)
    

Service 2 : heure Locale

  • Canal : getHL(lieu, k, t)
  • Règle :

    getHL(lieu, k, t) -> k(t, heureLocale)
    

    Mashup

  • Canaux
    • getMeteoHL(lieu, k)
    • repMeteo(t, m) et repHL(t, hl) (canaux de réponse)
  • Etat
    • Table mémorisant la correspondance entre le canal de retour et le temps logique
    • Compteur pour le temps logique

Déterminer les règles chimiques de transformation du mashup.

1.1 Règles - Solution

- getMeteoHL(lieu, k) & Temps(t)
    -> getMeteo(lieu, repMeteo, t) & getHL(lieu, repHL, t)
     & Temps(t + 1) & Table(k, t)
- repMeteo(t, meteo) & repHL(t, heureLocale) & Table(k, t)
    -> k(meteo, heureLocale)

2 Méthodes HTTP

Les actions correspondant aux requêtes peuvent posséder deux propriétés importantes :

  • la pureté (l'absence d'effets),
  • l'idempotence (deux actions consécutives ont le même effet qu'une action).

La pureté implique l'idempotence.

La pureté garantit la possibilité de mettre en cache. L'idempotence permet de répéter des actions sans effet observable, ce qui est utile pour gérer la perte de messages.

Ces deux propriétés permettent de classer les méthodes HTTP (actions correspondant aux requêtes HTTP) :

  • pur, idempotent : GET,
  • pur, non idempotent : absurde,
  • impur, idempotent : PUT, DELETE,
  • impur, non idempotent : POST.

Le but de l'exercice est de représenter les méthodes HTTP dans le modèle chimique.

Canal en deux composantes :

  • composante principale indiquant la ressource mère
  • composante secondaire identifiant la sous-ressource de la ressource mère

Notation : k/id pour la ressource mère k et la sous-ressource id

Message consistant en :

  • la méthode CRUD (ici les verbes du protocole http),
  • les informations pertinentes,
  • le canal de retour (pour la réponse).

Notation : (CRUD, info, ret)

Etat

  • Ressource(k, id, v) : relation donnant pour toute ressource mère k et toute sous-ressource id la valeur v associée à la sous-ressource

2.0.1 Création d'une ressource et mise à jour

Canal

  • k/id(PUT, val, ret) : création d'une nouvelle ressource à l'adresse k/id (définie par le client) et de valeur val ou mise à jour à val de la valeur de la sous-ressource si elle a déjà été créée

Déterminer les règles chimiques de transformation.

2.0.1.1 Règles - Solution
// Création
- k/id(PUT, val, ret) & (Ressource(k, id, _) inactive)
    -> ret(CREATED-201, k/id, val) & Ressource(k, id, val) 
// Mise à jour d'une sous-ressource existante
- k/id(PUT, val, ret) & Ressource(k, id, _)
    -> ret(OK-200, k/id, val) & Ressource(k, id, val)
  • Condition pour la création : absence de Ressource(k, id, _) dans l'état du serveur
  • Modification de l'état qui de plus s'agrandit lors d'une création
  • Idempotence

2.0.2 Lecture de la valeur de la ressource

Canal

  • k/id(GET, ret) : lecture de la valeur de la sous-ressource id de k

Déterminer les règles chimiques de transformation.

2.0.2.1 Règles - Solution
// Succès
- k/id(GET, ret) & Ressource(k, id, val) 
    -> ret(OK-200, k/id, val) & Ressource(k, id, val)
// Echec
- k/id(GET, ret) & (Ressource(k, id, _) inactive) 
    -> ret(NOTFOUND-404, k/id)
  • Pureté (pas d'effets de bord puisque l'état est inchangé
  • Idempotence

2.0.3 Mise à jour d'une ressource

2.0.3.1 Mise à jour absolue : PUT

Canal

  • k/id(PUT, val, ret) : mise à jour de la ressource à l'adresse k/id avec la valeur val

Déterminer les règles chimiques de transformation.

2.0.3.1.1 Règle - Solution
- k/id(PUT, val, ret) & Ressource(k, id, _)
    -> ret(OK-200, k/id, val) & Ressource(k, id, val)
  • Modification de l'état sans création de nouvelle ressource
  • Idempotence
2.0.3.2 Mise à jour incrémentale : POST

(moyen mnémotechnique : POST sur un forum)

Canal

  • k(POST, val, ret) : mise à jour incrémentale de la ressource mère d'adresse k, avec création d'une nouvelle sous-ressource d'adresse k/id, où id est un nouvel identifiant créé par le serveur

Déterminer les règles chimiques de transformation.

2.0.3.2.1 Règle - Solution
- k(POST, val, ret) & GenerateurIdentifiant(id) 
    -> ret(CREATED-201, k/id, val) 
       & Ressource(k, id, val) & GenerateurIdentifiant(id+1)
  • Création d'une sous-ressource dont l'adresse k/id créée par le serveur est récupérée par le client
  • Pas d'idempotence

2.0.4 Destruction d'une ressource

Canal

  • k/id(DELETE, ret) : destruction de la ressource d'adresse k/id

Déterminer les règles chimiques de transformation.

2.0.4.1 Règles - Solution
// Succès
- k/id(DELETE, ret) & Ressource(k, id, val) 
    -> ret(OK-200, k/id, val)
// Echec
- k/id(DELETE, ret) & (Ressource(k, id, _) inactive) 
    -> ret(NOTFOUND-404, k/id)
  • Destruction d'une (sous-)ressource connue du client
  • Idempotence

Version history: v1: 2016-10-19.
Comments or questions: Send a mail.
The webpage content is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.