57 lines
2.4 KiB
Markdown
57 lines
2.4 KiB
Markdown
# Projet webservices
|
|
|
|
## Composants
|
|
|
|
Un serveur fournit un service par le biais d'une API, qui est requêtée par deux clients.
|
|
|
|
Pour certaines fonctionnalités, le serveur doit faire des requêtes auprès d'une API publique.
|
|
Il doit donc embarquer une fonctionnalité de client auprès de l'API publique.
|
|
|
|
## Languages
|
|
|
|
Le serveur est écrit en Rust.
|
|
Le composant "client" du serveur, qui requête l'API publique, est également écrit en Rust.
|
|
|
|
Deux clients sont écrits, un en Rust, l'autre en Python.
|
|
|
|
## Token API
|
|
|
|
Un fichier `.token` contient le token nécessaire pour l'API publique.
|
|
Pour des raisons légales évidentes, ce fichier n'est pas inclus dans git.
|
|
C'est à l'utilisateur de créer un compte et d'ajouter son token dans ce fichier.
|
|
|
|
En l'occurence, l'API publique utilisée est celle de VirusTotal. Il faut s'y
|
|
créer un compte, la clé est alors disponible après authentification.
|
|
|
|
## Fonctionnalités
|
|
|
|
![architecture](./img/archi.png)
|
|
|
|
### Client - Artemis (Python)
|
|
|
|
### Client - Kratos (Rust)
|
|
|
|
### Serveur - Hephaïstos
|
|
|
|
- `receive_request`
|
|
Serveur HTTP en `listen` pour recevoir les requêtes API REST en provenance d'un client (Artemis ou Kratos).
|
|
Envoie l'URL reçu à `parse_url`.
|
|
- `parse_url`
|
|
Reçoit l'URL par `receive_request` et détermine la fonction à appeler.
|
|
- `get_data`
|
|
Reçoit les informations de la part de `parse_given_url`, et fait les choses suivantes :
|
|
* Requête `sql_cache` pour trouver les données localement.
|
|
* S'il les trouve, envoie les données à `transform_to_json`
|
|
* S'il ne les trouve pas, requête `api_client` et attend le retour (booléen qui lui indique que l'écriture a fonctionné)
|
|
* Une fois le retour positif, nouvelle requête `sql_cache`, puis idem, si donnée absente etc.
|
|
Le tout peut être mis dans une boucle `while not sql_content`.
|
|
- `sql_cache`
|
|
Base de données SQL qui sert de cache local et qui est requêtée par `get_data` (lecture) et `api_client` (écriture).
|
|
- `api_client`
|
|
Effectue les requêtes d'API REST auprès de VirusTotal.
|
|
Quand il reçoit des données valides, il les ajoute à `sql_cache`.
|
|
Retourne un booléen pour indiquer le succès ou l'échec de l'`insert`.
|
|
- `transform_to_json`
|
|
Fonction qui reçoit des données en provenance de `get_data` pour en faire du JSON et les envoie à `send_data`.
|
|
- `send_data`
|
|
Envoie les données au client (Artemis ou Kratos).
|