URL de production : https://euromillions.api.pedromealha.dev
URL de préparation : https://euromillions.staging.api.pedromealha.dev
Pile technologique : Python, Flask, PostgreSQL, Docker, Terraform, Github Actions
AVIS DE NON-RESPONSABILITÉ : les données de résultats de cette API sont analysées à partir du site Web https://www.euro-millions.com. Les données sont uniquement à des fins d'information, vous ne devez pas interpréter ces informations ou autres données comme des conseils financiers. Rien de ce qui est contenu dans cette API ne constitue une sollicitation, une recommandation, une approbation ou une offre d'achat de billets Euromillions. Cette API n'est en aucun cas affiliée à l'organisation Euromillions.
Une petite API REST pour le concours Euromillions. Vous trouverez ici tous les résultats depuis 2004 et quelques statistiques/analyses.
Le point final pour les tirages a des fonctionnalités intéressantes pour filtrer les tirages par year
ou dates
.
Cela a été fait en raison de l’absence de moyen d’obtenir facilement ces données. Comme ces informations sont de notoriété publique, les institutions doivent fournir une API pour celles-ci. Pendant ce temps, avec ces points de terminaison, la communauté peut créer des produits étonnants autour du contexte Euromillions, soit une application mobile, soit une application Web.
Mon objectif sera également de créer une application web permettant de générer des nombres à jouer basés sur des statistiques/analyses.
Pour la documentation, nous avons utilisé la spécification OpenAPI. Nous avons tous les points de terminaison disponibles avec les schémas et les exemples pour chaque cas d'utilisation. Ce n'est pas seulement parce que son utilisation est une norme industrielle, mais aussi parce qu'il est très facile à mettre à jour et à lire.
Concernant la base de données, nous utilisons le langage de balisage de base de données – DBML en abrégé. Encore une fois, c'est vraiment incroyable et peut immédiatement mettre n'importe quel nouveau venu en vitesse. Il existe également un outil en ligne pour visualiser les schémas de tables.
Vous pouvez consulter la documentation actuelle ici
Pour les résultats des tirages euromillions, nous avons utilisé le site https://www.euro-millions.com. Il contient des pages avec des données historiques pour tous les résultats des tirages existants. Nous ne consommons aucune API, nous avons analysé la page Web pour les données spécifiques dont nous avons besoin.
Pour les nouveaux tirages, nous avons la tâche cron suivante en cours d'exécution :
# Tous les mardis et vendredis toutes les 15min pendant 21h-23h*/15 21-23 * * 2,5 flyctl ssh console -a prod-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh"*/15 21 -23 * * 2,5 flyctl ssh console -a staging-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh"
Cette commande exécutera le script pour ajouter des tirages dans nos conteneurs de production et de préparation. De cette façon, nous garantissons que le code s'exécute dans le même environnement et nous n'avons pas besoin d'un point de terminaison exposé pour le faire.
Nous avons profité de la puissance et de la simplicité des actions Github. Il a été facile d'intégrer notre flux de déploiement pour la préparation et la production. Nous avons également Terraform exécuté dans tous nos flux de travail. Actuellement, nous utilisons le registre de conteneurs Github pour transmettre une image Docker que nous utiliserons pour exécuter notre API. Parce que Fly.io ne nous permet pas d'avoir différents environnements dont nous avions besoin pour créer différentes applications pour la mise en scène et la production. Dès que nous publions l'image, il nous suffit de créer une nouvelle version pour qu'une nouvelle version soit opérationnelle. Il s'agit d'une grande amélioration car désormais notre API s'exécute dans un conteneur, ce qui facilite son déploiement et sa maintenance.
Heureusement, nous pouvons utiliser Terraform pour gérer l'infra Fly.io avec du code. Comme il n'y a pas grand chose à faire, nous utilisons actuellement Terraform pour créer l'application, les IP publiques de l'application et les certificats de domaine. Pour la base de données, Fly.io ne permet toujours pas de les gérer via terraform, nous avons donc dû les créer manuellement à l'aide flyctl
. Ceci est intégré à notre CI dans les workflows de préparation et de production avec leurs espaces de travail respectifs.
Nous avons deux façons de travailler localement sur ce projet : docker ou exécuter l'application Flash.
Pour commencer, clonez le dépôt
clone git https://github.com/pedro-mealha/euromillions-apicd euromillions-api
Créer et démarrer un conteneur Docker
faire start_docker
Cela démarrera un conteneur avec une base de données postgres et un autre conteneur avec une image python. Dans le conteneur Python, il copiera tous les fichiers de projets, installera les exigences et enfin exécutera l'application Flask.
Assurez-vous que Python 3.12 est installé et qu'une base de données Postgres est installée.
Exigences d'installation.
pip install -r exigences.txt
Exécuter l'application Flask
commencer
Pour les migrations, nous utilisons yoyo. C'est vraiment simple mais nous avons néanmoins quelques commandes sur Makefile :
Pour exécuter des migrations :
faire migrer
Pour annuler la dernière migration :
faire migrate_rollback
Pour créer une nouvelle migration, c'est un peu délicat, car nous n'aimons pas le fichier .py, nous avons donc décidé d'utiliser des fichiers SQL bruts. Mais cela a un coût : nous devons créer de nouveaux fichiers manuellement.
Suivez simplement le modèle qui existe déjà et cela devrait être assez simple.
Licence MIT (fichier LICENCE).