# Webservice de génération de jeux de données :satellite: :globe_with_meridians: :minidisc: Tuteur : Antoine Brunetti ## Contexte Dans le cadre de la réalisation de tests de programmes, on est souvent amenés a utiliser des jeux de données fictives. Pour répondre à ce besoin, vous envisagez de constituer un produit qui permet de générer des données de tests pour des statisticiens et développeurs en herbe. Les utilisateurs de cette API pourront renseigner des types de données pour la génération à partir d'un language dédié : Par exemple : - définir un type SEXE qui ne prendrait que les valeurs M,F ou A ```json "SEXE":"'M'|'F'|'A'" ``` - ou définir un type composé VOITURE qui prendrait les valeurs composées : ```json { "VOITURE": { "nb_roues": "INT", "COULEUR": "'rouge'|'vert'|'bleu'" } } ``` Les utilisateurs de l'application définiront ensuite des schémas de données permettant de gérer les métadonnées nécessaires à la génération de données. Ces informations seront stockées en base de données. Par exemple : ```json { "sexe": { "type": "SEXE", "remplissage": 100 }, "age": { "type": "18|19|20", "remplissage": 100 }, "prenom": { "type": "NAME", "remplissage": 88.4 }, "nom": { "type": "NAME|'dupont'" "remplissage": 85 } } ``` Il faudra également qu'a partir d'un jeu de configuration fourni au format **JSON** au démarrage de l'application, vous définissiez le point d'entrée d'accès aux données générées. Cela permettra une meilleure utilisation de votre API pour permettre aux utilisateurs de tester un endpoint sans modifier leur configuration. La génération de ces données devra se faire selon différents formats , avec la possibilité de définir des seuils de remplissage en amont de la génération des données. Les différents jeux de données générés seront eux aussi sauvegardés pour permettre d'accéder aux données de manière stable *(par une graine :seedling:)*, cette graine pourra être fournie par un HEADER HTTP propre a votre application. Le point d'entrée de définition du schéma de données sera accessible en `GET` a un point d'entrée fixe de votre serveur. ## Fonctionnalités de bases - Définition des **valeurs** possibles pour un champ - Définition d'un **schéma** correspondant a une ligne de données à générer. - Définition d'un taux de remplissage pour un champ. - Démarrage de l'applicatif à partir d'un fichier de règles de bases - La réalisation d'un scénario d'usage de l'API. ## Fonctionnalités avancées - Génération d'un jeu de règles à partir d'un jeu de données - Gestion de l'authentification à l'API - Permettre l'export et l'import de schémas sous format JSON - Proposer une solution répondant à des enjeux de volumétrie (taille des jeux de données) - Réalisation de rapports de statistiques sur les jeux générés.