本番 URL: https://euromillions.api.pedromealha.dev
ステージング URL: https://euromillions.staging.api.pedromealha.dev
技術スタック: Python、Flask、PostgreSQL、Docker、Terraform、Github アクション
免責事項:この API の結果データは、https://www.euro-millions.com Web サイトから解析されます。データは情報提供のみを目的としており、そのような情報やその他のデータを財務上のアドバイスとして解釈しないでください。この API に含まれる内容は、ユーロミリオンズのチケット購入の勧誘、推奨、承認、または申し出を構成するものではありません。この API は、ユーロミリオンズ組織とはいかなる関係もありません。
ユーロミリオン向けの小規模な REST API コンテスト。ここでは、2004 年以降のすべての結果といくつかの統計/分析が見つかります。
描画をフェッチするエンドポイントには、 year
またはdates
で描画をフィルタリングするための優れた機能がいくつかあります。
このデータを簡単に取得する方法がなかったため、これが行われました。この情報は公知であるため、各機関はその情報用の API を提供する必要があります。一方、これらのエンドポイントを使用すると、コミュニティはユーロミリオンのコンテキスト (モバイル アプリまたは Web アプリ) を中心に素晴らしい製品を構築できます。
私の目標は、統計/分析に基づいてプレイする数字を生成できる Web アプリを構築することです。
ドキュメントには OpenAPI 仕様を使用しました。各ユースケースのスキーマと例を備えた利用可能なすべてのエンドポイントが用意されています。これは、業界標準として使用されているだけでなく、更新や読み取りが非常に簡単であるためでもあります。
データベースに関しては、データベース マークアップ言語、略して DBML を使用します。繰り返しますが、これは本当に驚くべきもので、新しい結合者をすぐにスピードアップさせることができます。テーブル スキーマを視覚化するオンライン ツールもあります。
現在のドキュメントはここで確認できます
ユーロミリオンズの抽選結果については、Web サイト https://www.euro-millions.com を使用しました。既存のすべての抽選結果の履歴データを含むページがあります。 API は一切使用せず、Web ページを解析して必要な特定のデータを取得しました。
新しい描画のために、次の cronjob を実行します。
# 毎週火曜日と金曜日、21 時~23 時の間は 15 分ごと*/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 コンソール -a staging-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh"
このコマンドは、本番コンテナとステージング コンテナ内に描画を追加するスクリプトを実行します。このようにして、コードが同じ環境で確実に実行されるようにし、そのために公開エンドポイントを必要としません。
私たちは、Github Actions のパワーとシンプルさを活用しました。ステージングと運用のためのデプロイメント フローを統合するのは簡単でした。また、すべてのワークフローで Terraform を実行しています。現在、Github コンテナ レジストリを使用して、API の実行に使用する Docker イメージをプッシュしています。 Fly.io では異なる環境を使用できないため、ステージング用と本番用に異なるアプリを作成する必要がありました。イメージをプッシュしたらすぐに、新しいリリースを作成するだけで新しいバージョンが稼働します。 API がコンテナ内で実行されるようになり、デプロイと保守が容易になったため、これは大きな改善です。
幸いなことに、Terraform を使用してコードで Fly.io インフラを管理できます。やるべきことはあまりないので、現時点では terraform を使用してアプリ、アプリのパブリック IP、およびドメイン証明書を作成します。データベースに関しては、Fly.io ではまだ terraform を使用してデータベースを管理できないため、 flyctl
使用して手動でデータベースを作成する必要がありました。これは、ステージング ワークフローと本番ワークフローのそれぞれのワークスペースの CI に統合されています。
このプロジェクトをローカルで作業するには、Docker または Flash アプリを実行する 2 つの方法があります。
まずリポジトリのクローンを作成するには
git clone https://github.com/pedro-mealha/euromillions-apicd euromillions-api
Dockerコンテナを構築して起動する
start_docker を作成する
これにより、postgres データベースを含むコンテナーと Python イメージを含む別のコンテナーが起動されます。 Python コンテナでは、すべてのプロジェクト ファイルがコピーされ、要件がインストールされ、最後に flask アプリが実行されます。
Python 3.12 がインストールされており、postgres データベースがインストールされていることを確認してください。
インストール要件。
pip install -r 要件.txt
フラスコアプリを実行する
始める
移行にはヨーヨーを使用します。これは非常に簡単ですが、Makefile にはいくつかのコマンドがあります。
移行を実行するには:
移行させる
最後の移行をロールバックするには:
移行ロールバックを作成する
新しい移行を作成するのは少し難しいです。.py ファイルが気に入らなかったので、生の SQL ファイルを使用することにしました。ただし、これには新しいファイルを手動で作成する必要があるというコストがかかります。
すでに存在するパターンに従うだけで、かなり簡単になるはずです。
MIT ライセンスを取得しています (ファイル LICENSE)。