Produkt-URL: https://euromillions.api.pedromealha.dev
Staging-URL: https://euromillions.staging.api.pedromealha.dev
Tech-Stack : Python, Flask, PostgreSQL, Docker, Terraform, Github-Aktionen
HAFTUNGSAUSSCHLUSS : Die Ergebnisdaten in dieser API werden von der Website https://www.euro-millions.com analysiert. Die Daten dienen ausschließlich Informationszwecken. Sie sollten solche Informationen oder andere Daten nicht als Finanzberatung auffassen. Nichts in dieser API stellt eine Aufforderung, Empfehlung, Billigung oder ein Angebot zum Kauf von Euromillions-Tickets dar. Diese API ist in keiner Weise mit der Euromillions-Organisation verbunden.
Eine kleine REST-API für den Euromillions-Wettbewerb. Hier finden Sie alle Ergebnisse seit 2004 und einige Statistiken/Analysen.
Der Endpunkt für die Durchführung von Ziehungen verfügt über einige coole Funktionen zum Filtern der Ziehungen nach year
oder dates
.
Dies geschah, weil es keine Möglichkeit gab, diese Daten einfach abzurufen. Da diese Informationen öffentlich bekannt sind, sollten Institutionen eine API dafür bereitstellen. Mittlerweile kann die Community mit diesen Endpunkten erstaunliche Produkte rund um den Euromillions-Kontext entwickeln, entweder eine mobile App oder eine Web-App.
Mein Ziel wird es auch sein, eine Web-App zu erstellen, die es ermöglicht, auf der Grundlage von Statistiken/Analysen Zahlen zum Spielen zu generieren.
Für die Dokumentation haben wir die OpenAPI-Spezifikation verwendet. Wir verfügen über alle verfügbaren Endpunkte mit den Schemata und Beispielen für jeden Anwendungsfall. Das liegt nicht nur daran, dass es sich um einen Industriestandard handelt, sondern auch daran, dass es wirklich einfach zu aktualisieren und zu lesen ist.
Bezüglich der Datenbank verwenden wir die Database Markup Language – kurz DBML. Auch hier ist es wirklich erstaunlich und kann jeden neuen Tischler sofort in Schwung bringen. Es gibt auch ein Online-Tool zur Visualisierung der Tabellenschemata.
Die aktuellen Dokumente können Sie hier einsehen
Für die Euromillions-Ziehungsergebnisse haben wir die Website https://www.euro-millions.com genutzt. Es verfügt über Seiten mit historischen Daten für alle vorhandenen Ziehungsergebnisse. Wir nutzen keine API, sondern haben die Webseite nach den spezifischen Daten analysiert, die wir benötigen.
Für neue Ziehungen läuft bei uns folgender Cronjob:
# Jeden Dienstag und Freitag alle 15 Minuten von 21 bis 23 Uhr*/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-Konsole -a staging-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh“
Dieser Befehl führt das Skript aus, um Draws in unseren Produktions- und Staging-Containern hinzuzufügen. Auf diese Weise stellen wir sicher, dass der Code in derselben Umgebung ausgeführt wird und wir dafür keinen exponierten Endpunkt benötigen.
Wir haben die Leistungsfähigkeit und Einfachheit von Github Actions genutzt. Es war einfach, unseren Bereitstellungsablauf für Staging und Produktion zu integrieren. Wir haben Terraform auch in allen unseren Workflows ausgeführt. Derzeit verwenden wir die Github-Container-Registrierung, um ein Docker-Image zu pushen, das wir zum Ausführen unserer API verwenden werden. Da Fly.io uns keine unterschiedlichen Umgebungen erlaubt, mussten wir unterschiedliche Apps für Staging und Produktion erstellen. Sobald wir das Image pushen, müssen wir nur noch eine neue Version erstellen, um eine neue Version zum Laufen zu bringen. Dies ist eine große Verbesserung, da unsere API jetzt in einem Container ausgeführt wird, was eine einfachere Bereitstellung und Wartung ermöglicht.
Glücklicherweise können wir Terraform verwenden, um die Fly.io-Infrastruktur mit Code zu verwalten. Da es nicht viel zu tun gibt, verwenden wir derzeit Terraform, um die App, die öffentlichen IP-Adressen der App und die Domänenzertifikate zu erstellen. Für die Datenbank erlaubt Fly.io immer noch keine Verwaltung mit Terraform, daher mussten wir sie manuell mit flyctl
erstellen. Dies ist in unserem CI in den Staging- und Produktionsworkflows mit ihren jeweiligen Arbeitsbereichen integriert.
Wir haben zwei Möglichkeiten, lokal an diesem Projekt zu arbeiten: Docker oder Ausführen der Flash-App.
Klonen Sie zunächst das Repo
Git-Klon https://github.com/pedro-mealha/euromillions-apicd euromillions-api
Erstellen und starten Sie den Docker-Container
Machen Sie start_docker
Dadurch wird ein Container mit einer Postgres-Datenbank und ein weiterer Container mit einem Python-Image gestartet. Im Python-Container werden alle Projektdateien kopiert, die Anforderungen installiert und schließlich die Flask-App ausgeführt.
Stellen Sie sicher, dass Sie Python 3.12 und eine Postgres-Datenbank installiert haben.
Installationsanforderungen.
pip install -r Anforderungen.txt
Führen Sie die Flask-App aus
den Anfang machen
Für Migrationen verwenden wir yoyo. Es ist wirklich einfach, aber wir haben dennoch einige Befehle in Makefile:
So führen Sie Migrationen aus:
migrieren lassen
So machen Sie die letzte Migration rückgängig:
make migrate_rollback
Das Erstellen einer neuen Migration ist etwas schwierig, da uns die .py-Datei dafür nicht gefiel und wir uns entschieden haben, rohe SQL-Dateien zu verwenden. Dies ist jedoch mit Kosten verbunden, da wir neue Dateien manuell erstellen müssen.
Folgen Sie einfach dem bereits vorhandenen Muster und es sollte ziemlich einfach sein.
MIT-Lizenz (Dateilizenz).