• Aucun résultat trouvé

Patrons de conception de Web Services

N/A
N/A
Protected

Academic year: 2022

Partager "Patrons de conception de Web Services"

Copied!
20
0
0

Texte intégral

(1)

Patrons de conception de Web Services

[trousse “premiers secours”]

Récapitulation

Styles d’API de Web Service RPC API

Message API Resource API

Styles d’interaction Client­Service Requête/Réponse

Négociation de type de contenu Gestion de requête et de réponse

Service Controller

Styles d’implémentation de Service Web Transaction Script

Datasource Adapter Operation script Workflow connector

Infrastructures de Services Web Service connector

Asynchronous Response Handler Idempotent Retry

Evolution des Services Web Lecteur tolérant

Consumer­Driven Contracts

(2)

Récapitulation

de la liste Daigneau/ Robonson, 2012

(3)
(4)

Styles d’API de Web Service RPC API

(Remote procedure Call)

Problème: Comment un client qui utilise le protocole http peut exécuter des procédures à

                          distance.

Contexte: Il est facile de communiquer entre un client et un serveur qui s’exécute sur deux

                              plateformes différentes grâce au protocole HTTP.

Forces : 

Simple à mettre en place

Résumé de la solution     

    : Une des solutions est d’envoyer des messages dont la                 sémantique est encapsulée pour faire appel aux procédures.

Détail de la solution:     

  Avec RPC, le client envoie un message à un serveur distant et                       bloque en attendant la réponse. La requêter identifie la procédure à exécuter et contient un                             certain nombre de paramètres qui sont directement reliés aux paramètres de la procédure                         distante. Quand un message arrive sur le serveur, le serveur inspecte le message et                           invoque la procédure dont le nom est contenu dans le message et il relie les paramètres                               du   message   directement   aux   arguments   d’entrée   du   service.

Liens:http://servicedesignpatterns.com/WebServiceAPIStyles/RemoteProcedureCallAP I

(5)

Message API

Autres noms du patron : Document API

Problème: Comment les clients peuvent­ils envoyer des commandes, des notifications, ou        d’autres informations à des systèmes distants, en utilisant HTTP, et en évitant un couplage        direct des procédures distantes ?         (How can clients send commands, notifications, or other              information to remote systems over HTTP while avoiding direct coupling to remote procedures?) Contexte : Dans certains cas, le design du message ne peut pas être entièrement encadré par        le créateur du service. C’est par exemple le cas dans de grandes organisations ou dans des        scénarios où des partenaires commerciaux échangent des données. Dans ces situations, les        développeurs du service ont besoin d’une API qui reconnaît un ensemble de messages liés,        mais qui ne lie pas ces messages à des procédures spécifiques.

Forces : Les API de message utilisent souvent des formats standardisés tels que SOAP.

Résumé de la solution         : Définir des messages qui ne sont pas dérivés des signatures des        procédures distantes.

Détail de la solution: Les messages peuvent transporter de l’information sur des thèmes            spécifiques, des tâches à exécuter, et des évènements. Faire en sorte que le client envoie le        message à une URI désignée. Une fois que le message est reçu sur le serveur, examiner son        contenu pour déterminer la procédure correcte à exécuter.

Liens Web :http://servicedesignpatterns.com/WebServiceAPIStyles/MessageAPI

(6)

Resource API

Problème: Comment un client peut­il manipuler les données d’un système distant, en évitant de        faire appel aux procédures distantes, et minimisant les besoins d’APIs spécifiques?

Contexte: Souvent, les webservices sont basés sur le transfert de messages afin de créer leur        propre API spécifique. Le problème est que cela conduit souvent à une prolifération de ces        messages, basés sur les commandes de bases CRUD.

Exemple : Considérons, par exemple, un ensemble de services qui gèrent l'entreprise et les        informations sur les contacts. Dans ce scénario, le développeur du client devra utiliser plusieurs        messages personnalisés. Une API comme cela pourrait inclure des messages comme       

"CreateCompany", "getCompany", et ainsi de suite. Le propriétaire du service aurait également à        créer  des  messages  de  réponse  (par  exemple  "CreateCompanyResponse",

"GetCompanyResponse", etc.). Cela aura pour conséquence d’alourdir sa tâche (nombreux        messages à créer à la main) mais aussi de surcharger le réseau !

Forces   : Simplifier le travail de l’utilisateur en se basant sur les normes définies par HTTP. En        particulier dans l’approche REST qui est orientée ressources, cela permet d’éviter les doublons        en cas de réémission de requêtes

Résumé de la solution         : Attribuez une URI à toutes les procédures, les instances de données        du domaine, et les fichiers. Utilisez alors HTTP comme un protocole d'application complet pour        définir les comportements de services standards. Echangez des informations en profitant des        types de supports standardisés et des codes d’état (quand ils sont disponibles).

 

Description : Le client appelle le service en envoyant des requêtes composée par :

­ une méthode (GET, PUT, POST, DELETE)

­ le type de données

(7)

­ une URI

La requête et ses paramètres sont utilisés par le serveur pour déterminer le service à invoquer.       

Une fois que le service a été invoqué, il peut traiter la demande du client et renvoie une réponse        contenant le type de support requis et/ou le code d'état.

Si on est en REST les informations de base (1 personne, 1 verbe, 1 objet) sont dans l’en­tête        de la requête, ce qui évite les doublons en cas de réémission.

Les services orientés API ressources adhèrent souvent aux principes de REST. Cependant,        toutes les API de type ressources ne peuvent pas être considérés comme RESTful !

Exemples:

(8)

Styles d’interaction Client-Service Requête/Réponse

Problème: (une phrase sur le problème) : Comment traiter de la manière la plus simple une        requête. Décrire le mécanisme de requête/réponse entre client et serveur (synchrone).       (What’s the simplest way for a web service to process a request and provide a result ? )

Contexte: Le client établit une connexion sur le serveur distant, il envoit la requête, la requête        est traitée par le serveur et il renvoit la réponse.

Forces : : Simple à mettre en place.

Résumé de la solution           : il y a un ensemble d’échange entre client et serveur (avec une       

(9)

opération de traitement).

Détail de la solution: : le client établit une connexion, le serveur accepte ou refuse, s’il refuse le            processus se termine, s’il accepte le serveur traite la requête (en 1 thread) puis renvoit la        réponse. La particularité se situe au niveau du fait qu’il s’agit d’appel blocant (mécanisme de        synchronisation).

Autres facteurs: Le schéma est très simpliste et n’est pas adapté au dialogue relatif au        protocole http car dans ce cas précis, le dialogue entre client et server génère plusieurs        requêtes (images, fichier css, fichier html...)

Lien : http://servicedesignpatterns.com/ClientServiceInteractions/RequestResponse

Négociation de type de contenu

(media­type Negotiation)

Problème :   Comment un web­service peut­il fournir des représentations multiples des mêmes        ressources en minimisant le nombre d’URI distinctes pour cette ressource ?       (How can a web      service provide multiple representations of the same logical resource while minimizing the                      number of distinct URIs for that resource ?)

Contexte :   Les services Web doivent souvent tenir compte des préférences de types de        médias. Certains clients peuvent, par exemple, préferer XML tandis que d'autres favorisent        JSON. Le propriétaire du service doit donc trouver un moyen par lequel les préférences peuvent        être indiquées.

Force : Une seule URL pour plusieurs représentations

Résumé de la solution :         Quand une requête est reçue, le web service selectionne un        gestionnaire basé en partie sur les préférences client précisées via le header Accept

(10)

Détail de la solution :         Utiliser le Header HTTP       Accept pour préciser au serveur le type de        représentation que l’on souhaite recevoir

Exemples : Accept: text/html, application/xhtml+xml, application/xml;

(11)

Lien: http://servicedesignpatterns.com/ClientServiceInteractions/MediaTypeNegotiation

Gestion de requête et de réponse Service Controller

Problème: Comment le web service correct peut­il être exécuté sans avoir à maintenir une        analyse complexe et une logique de routage ?

(12)

Contexte: Tous les services web sont tributaires de mécanismes qui reçoivent des demandes,        d'évaluer la signification de la demande, et acheminer les demandes aux procédures (par        exemple, les méthodes de classe, gestionnaires de requêtes) qui mettent en œuvre les        comportements de service. Les concepteurs de services peuvent centraliser cette logique dans        un Front Controller. Ce modèle fonctionne très bien si le service correct peut être sélectionné        par simple analyse l'URI demandé. Malheureusement, ce n'est pas toujours le cas. La logique        de routage peut devenir beaucoup plus complexe si le service doit être choisi en fonction        préférés médias du client, le message des valeurs d'en­tête ou le contenu du message du        corps. Les développeurs pourraient bénéficier d'une approche déclarative simple qui peut être        interprété par un contrôleur frontal.

Résumé de la solution         : Créez une classe qui identifie un ensemble de services connexes.       

Annoter chaque méthode de classe (@annotation sous java) avec routage d’expression qui        peuvent être interprétés par un contrôleur frontal.

Détail de la solution:       (éventuellement schéma; signaler notamment les liens avec d’autres              patterns) :

Liens  :http://servicedesignpatterns.com/RequestAndResponseManagement/ServiceController

Styles d’implémentation de Service Web Transaction Script

problème: comment implementer rapide et efficace la partie logique des web service?

contexte:  Ecrire une logique personnelle permettant l’accès à une base de donnée, la        manipulation de fichiers ou d’autres objectifs directement dans la methode du service web.

force: simplicité , rapidité, modularité

résumé de la solution:       implémenter une séparation et une interface d’accès entre la logique        métié du web service et tout ce qui concerne la bdd, les fichiers et d’autres ressources.

détails de la solution:

(13)

lien:http://www.servicedesignpatterns.com/WebServiceImplementationStyles/TransactionScript

Datasource Adapter

autre nom: Adapter Pattern

problème: How can a web service provide access to internal resources like database tables,        stored procedures, domain objects, or files with a minimum amount of custom code?

force: simplicité d’accès aux données

résumé de la solution:       Create a web service that uses a specialized Datasource Provider.       

Leverage developer tools that generate datasource metadata and produce controllers that not        only encapsulate and interpret the rules for request processing, but also direct the actions of        Datasource Providers and Message Formatters.

détails de la solution:

(14)

lien:  : http://www.servicedesignpatterns.com/WebServiceImplementationStyles/DatasourceAdapter

Operation script

probleme: Comment un service web peut­il réutiliser le domaine logique sans réutiliser de        code?

contexte: Encapsuler des logiques métier communes dans des couches de domaines qui        existe en dehor du web service. Permet de limiter la logique dans le web service aux        algorithmes dirigeant les activités de ces entités.

forces: réutilisation, maintenabilité, code propre et lisible, simplicité du code.

résumé de la solution:       Transaction script peut parfois être trop complexe causant des        problèmes dmaintenabilités. Les developpeurs de services peuvent ameliorer la lisibilité de leurs        codes en extrayant le code sélectioné par fragments en dehors du web service dans de plus        petites méthodes. Cependant le problème de la duplicité du code n’est totalement résolu si les        méthodes extraites sont placés dans la même classe que la méthode du web service.

détails de la solution:

lien: http://www.servicedesignpatterns.com/WebServiceImplementationStyles/OperationScript

Workflow connector

problème: Comment les web services peuvent implémenter des processus complexes et        nécessitant un long temps d’exécution ?       (How can web services be used to support complex                and long­running business processes ?)

contexte:  Un web service effectue de (très) lourds traitements : il reste dans la mémoire du        serveur tout le temps de l’opération, ce qui nuis aux performances du serveur,        proportionnellement au nombre d’appels au service.

De plus si le serveur crash, on peu perdre tout ou partie des données traitées, ainsi que l’état du        serveur en cours.

force: récupération de l’état du process en cas de crash

résumé de la solution:Use a workflow engine to manage the life cycle and execution of tasks            within complex or long­running business processes. Identify a web service that will trigger each        logical business process. Use callback services to receive additional data for these long­running       

(15)

processes, and forward messages from these callback services to the workflow engine.

détails de la solution:

Workflow engines   govern entire workflow life cycles from process instantiation to termination.       

They trigger task execution, and, for each process instance, keep track of which tasks are        executing, which are waiting or suspended, and which must be resumed or restarted. Many        workflow engines save the state of tasks and variables to a database before and after tasks are        executed.

The Workflow Connector   pattern uses web services as a means to launch business processes        managed by workflow engines. Developers designate a       Trigger service   that creates new    process instances for a given process definition.       Callback Services   may also be designated to        receive additional data after the process has started. The workflow engine ensures that each        callback message is routed back to the correct process instance.

Liens:

http://www.servicedesignpatterns.com/WebServiceImplementationStyles/WorkflowConnector

Infrastructures de Services Web Service connector

Problème : Comment ne pas dupliquer du code lorsqu’on utilise un web service particulier.

Contexte Lorsqu’on utilise un web service dans son application avec du REST avec les bons        en­têes http etc.

Forces : S’abstrait de la complexité technique de la technologie employée

(16)

Résumé   : On crée une librairie qui sert de passerelle qu’on utilise facilement et qui va se        charger d’ajouter les options et autre détails techniques spécifiques à la technologie sans        complexifier l’utilisation.

Llien : http://www.servicedesignpatterns.com/WebServiceInfrastructures/ServiceConnector

Asynchronous Response Handler

Problème: Comment envoyer des requetes non blocantes au serveur (How can a client avoid        blocking when sending a request?

Contexte: Comment eviter les appels bloquants à un webservice donné, c’est à dire generé des        appels asynchrones ( appels non bloquants)

Forces   : Les requetes asynchrones vont permettre au client de realiser des appels non blocants        au serveur, permettant au client de realiser d’autres taches en attendant la réponse du serveur Résumé de la solution         : Le client envoie une requete à un connecteur (service ou proxy), ce        connecteur prend en charge la requete et l’envoie au serveur final. Le serveur traite la requete, la        connexion est maintenue.

Dans certains cas, cette approche peut etre combinée avec un autre patron (scrutation, polling)        consistant à interroger à intervalle regulier le service pour savoir où il en est dans le traitement,        puis une fois le travail du serveur terminé le serveur renvoie la réponse au connecteur qui la        renvoie au client.

Détail de la solution: Diagramme de séquence de la solution :

Lien avec le pattern “Service Connector”: ce patron prend en compte la mise en place du patron       

“Service Connector” qui gère la réponse renvoyée par le service demandé.

(17)

Autres facteurs: Il y a 2 formes de ce patron: “polling method” et “client­side callback”. La        différence entre les deux est la manière pour le service connecteur de gérer la réponse du        service. Avec le “polling method”, le client est obligé de demander périodiquement au connecteur        s’il a reçu la réponse du service. Avec l’autre formes, “client­side callback”, le connecter        s’occupe de notifier le client dès que la réponse est arrivée et ensuite la renvoie au client.

Exemples :

(18)

Liens : http://servicedesignpatterns.com/WebServiceInfrastructures/AsyncResponseHandler

Idempotent Retry

Problème: 

How can a client ensure that requests are delivered to a web service despite                           temporary network or server failures?

Contexte:

  Un client tente de se connecter à un service mais du fait de la mauvaise qualité                               de sa connexion internet, il lui est très difficile d’accéder aux ressources souhaitées.

Résumé de la solution :       

  La solution d’un tel problème pourrait passer par l’utilisation                

d’un intermédiaire chargé de gérer les communications entre les services et les clients                        

mais cette solution peut paraître trop lourde dans bien des cas. Une solution à ce type de                                

(19)

problème de connexion est tout simplement de laisser le client réessayer de se connecter                           jusqu’à ce que le service lui soit accessible dans la limite d’un nombre de tentatives défini.

Détail de la solution:     

    Il suffit donc d’identifier chaque requête de connexion avec un                 identifiant propre. La requête est envoyée au service qui répond ou non. Si le service ne                               répond pas, le client renvoi cette requête jusqu’à ce que le nombre de demande n’excède                             pas la limite imposée ou que la connexion soit établie. Si la limite est atteinte, les requêtes                                 sont tout simplement ignorées.

Liens:  http://www.servicedesignpatterns.com/WebServiceInfrastructures/IdempotentRetry

Evolution des Services Web Lecteur tolérant

(Tolerant reader)

Problème: Comment les clients ou services peuvent­ils fonctionner convenablement quand        certains contenus des messages ou des types de médias qu’ils reçoivent sont inconnus, ou        quand les structures de données changent ?      (How can clients or services function properly            when some of the content in the messages or media types they receive is unknown or when the                                  data structures vary?)

Contexte: Un client ou un service s’attend à ce que des changements surviennent dans un        message ou un type de média

Détail du problème       : Service owners often have to deal with message variability as well. For        example, some message structures may be owned and designed by business partners, industry        consortium, or trade groups. In situations like these, service developers may not be able to keep        up with client applications that adopt newer versions of these messages. The service must        therefore be forward compatible and accept client content that it may not fully understand.

How can clients continue to process service responses when some of the content is unknown       

(20)

or the data structures vary, and how can services deal with changing client request messages?

Résumé de la solution         : Concevoir le client ou le service de façon à n'extraire que ce qui est        nécessaire, ignorer le contenu inconnu, et s'attendre à des structures de données variables Détail de la solution         : Tolerant Readers extract only what is needed from a message and        ignore the rest. Rather than implementing a strict validation scheme, they make every attempt to        continue with message processing when potential schema violations are detected. Exceptions        are only thrown when the message structure prevents the reader from continuing, or the content        clearly violates business rules. Tolerant Readers ignore new message items, the absence of        optional items, and unexpected data values as long as this information does not provide critical        input to the service logic.

Lien : http://servicedesignpatterns.com/WebServiceEvolution/TolerantReader

Consumer-Driven Contracts

Problème: Comment l’API d’un service web reflète­t­elle les envies de ses clients tout en        permettant son évolution et en évitant de géner le client ?. Les services répondent logiquement        aux besoins des clients mais en général ces besoins divergent. Les services doivent évoluer        tout en évitant qu’un seul des clients soit confronté à des problèmes au cours de cette opération.

Contexte: Un service possède plusieurs clients avec pour chacun des besoins différents. Les        propriétaire de service savent qui sont leurs clients et les développeurs du côté client sont        capables de communiquer leurs attentes concernant l’API du service au propriétaire.

Forces :Faire évoluer un service tout en évitant de géner les clients.

Résumé de la solution           : IIl s’agit pour le client de faire des tests automatiques qui sont envoyés        au fournisseur de service afin de l’aider à modifier son service sans créer de gène.

Détail de la solution: La solution à cette problématique est la suivante. Quand le propriétaire            d’un service met à jour l’API de celui­ci, il effectue une batterie de tests avec son service et l’API.       

De son côté le client effectue des tests automatiquement communiqués au propriétaire du        service afin que celui­ci puisse jugé des parties à changer pour que le client n’obtienne plus de        problèmes.

Liens Web : Consumer­Driven Contract

Références

Documents relatifs

Pour le SNES, la question des rythmes scolaires doit être posée en partant des missions de l’école et des objectifs de formation initiale qu’on se donne pour toute la jeunesse, tant

Pour le SNES, la question des rythmes scolaires doit être posée en partant des missions de l’école et des objectifs de formation initiale qu’on se donne pour toute la jeunesse, tant

Pour le SNES, la question des rythmes scolaires doit être posée en partant des missions de l’école et des objectifs de formation initiale qu’on se donne pour toute la jeunesse, tant

Ce qui fait de l'Observateur un patron de conception est qu'il abstrait les architectures statiques et dynamiques d'une solution donnée pour résoudre un problème particulier dans

Así que los temas o las justificaciones dadas por los informantes acerca del porqué utilizan el español varían entre: el uso por formalidad, dominio de la lengua, por

Our process guides the user in formulating the desired quality goal, helps him/her in identifying the relevant quality patterns or quality attributes with respect to

Both mechanisms induce a negative charge within the active layer, leading to potential bending (see Figure 14b) in the case of doping) and asymmetrical charge