產品網址: https://euromillions.api.pedromealha.dev
暫存 URL: https://euromillions.staging.api.pedromealha.dev
技術堆疊:Python、Flask、PostgreSQL、Docker、Terraform、Github Actions
免責聲明:此 API 中的結果資料是從 https://www.euro-millions.com 網站解析的。此數據僅供參考,您不應將此類資訊或其他數據視為財務建議。此 API 中包含的任何內容均不構成招攬、推薦、認可或購買 Euromillions 門票的要約。此 API 不以任何形式附屬於 Euromillions 組織。
歐洲百萬大賽的小型 REST API。在這裡您可以找到自 2004 年以來的所有結果以及一些統計數據/分析。
fecth 抽獎的端點有一些很酷的功能,可以按year
或dates
過濾抽獎。
這樣做是因為缺乏輕鬆取得這些數據的方法。由於這些資訊是公共知識,機構應為其提供 API。同時,透過這些端點,社群可以圍繞 Euromillions 環境建立令人驚嘆的產品,無論是行動應用程式還是網路應用程式。
我的目標還包括建立一個網頁應用程序,以便根據統計/分析產生可玩的數字。
對於文檔,我們使用 OpenAPI 規範。我們擁有所有可用的端點以及每個用例的架構和範例。這不僅是因為它是使用它的行業標準,還因為它確實很容易更新和閱讀。
對於資料庫我們使用資料庫標記語言-簡稱DBML。再次強調,它確實令人驚嘆,可以讓任何新加入者立即加快速度。還有一個線上工具可以視覺化表模式。
您可以在此處查看當前文檔
對於 Euromillions 抽獎結果,我們使用網站 https://www.euro-millions.com。它的頁麵包含所有現有抽獎結果的歷史資料。我們不使用任何 API,我們解析網頁以取得我們需要的特定資料。
對於新的抽獎,我們運行以下 cronjob:
# 每週二、週五21h-23h 期間每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 應用程式。
開始克隆儲存庫
git 克隆 https://github.com/pedro-mealha/euromillions-apicd euromillions-api
建置並啟動 docker 容器
使start_docker
這將啟動一個帶有 postgres 資料庫的容器和另一個帶有 python 映像的容器。在 python 容器中,它將複製所有專案文件,安裝需求,最後執行 Flask 應用程式。
確保安裝了 python 3.12 和 postgres 資料庫。
安裝要求。
pip install -r 要求.txt
運行燒瓶應用程式
開始
對於遷移,我們使用 yoyo。這確實很簡單,但是我們在 Makefile 上有一些指令:
運行遷移:
使遷移
要回滾上次遷移:
進行遷移_回滾
要創建新的遷移有點棘手,因為我們不喜歡它的 .py 文件,所以我們決定使用原始 sql 文件。但這是有代價的,我們需要手動建立新檔案。
只需遵循已經存在的模式即可,這應該相當容易。
麻省理工學院許可(文件許可證)。