# Infra : Architecture du code

Ci-dessous un schéma représentant les éléments principaux de l'application, leurs relations entre eux ainsi que le tracé du traitement d'une requête faite aux APIs.

![](https://3815706320-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LA8hlWMA3HAn1aR4sRy%2F-LA8hqOJZTiJG9COhM_o%2F-LA8hsgXc6iU-jFBPq54%2Farchi_1_.png?generation=1523802674569301\&alt=media)

## Traitement de requêtes <a href="#traitement_de_requetes" id="traitement_de_requetes"></a>

Lors de la réception d'une requête, celle-ci est filtrée par le routeur puis dispatchée au bon contrôleur qui va se charger de constituer la réponse à renvoyer (traitement classique par une application Rails).

Après s'être assuré de l'authentification de la requête, le contrôleur fait appel à son*Retriever\_chargé de créer la réponse à la requête. Pour cela, il se peut que le\_Retriever\_ait à agréger des données issues de sources différentes. C'est pourquoi le\_Retriever\_fait appel à des\_Drivers*.

## Responsabilités <a href="#responsabilites" id="responsabilites"></a>

Sont documentés ici les responsabilités des différents éléments impliqués dans le traitement d'une requête soumise à l'application.

### Routeur et contrôleur <a href="#routeur_et_controleur" id="routeur_et_controleur"></a>

Le routeur et les contrôleurs n'ont ici rien de particulier. Ce sont les couches d'une architecture MVC classique et leur rôle n'a rien de spécifique dans le cas du projetAPIEntreprise.

### Les Drivers <a href="#les_drivers" id="les_drivers"></a>

Les\_Drivers\_sont les éléments chargés de créer les requêtes et d'en parser les réponses pour une source de données précise et unique. A un fournisseur de données (INSEE, Greffe, …) est donc associé un\_Driver\_spécifique. Un\_Driver\_a pour responsabilité de :

* constituer la requête (*Request*) et l'exécuter ;
* parser de la réponse (*Response*) pour en extraire les données cibles ;
* fournir ces données, ou le code d'erreur reçu en réponse à la *Request*, au *Retriever*

### Les Retrievers <a href="#les_retrievers" id="les_retrievers"></a>

Les \_Retrievers \_sont en général en relation 1-1 avec un contrôleur. Leur rôle consiste à :

* Aiguiller la requête vers les \_Drivers \_correspondant. Il est de la responsabilité d'un \_Retriever \_de savoir à quels \_Drivers \_faire appel ;
* Agréger les données renvoyées par les différents \_Drivers \_et constituer le corps de la réponse à fournir au contrôleur.

### Request et Response <a href="#request_et_response" id="request_et_response"></a>
