产品网址: 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应用程序/脚本/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 文件。但这是有代价的,我们需要手动创建新文件。
只需遵循已经存在的模式即可,这应该相当容易。
麻省理工学院许可(文件许可证)。