제품 URL: 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 조직과 어떤 종류의 관련도 없습니다.
Euromillions 콘테스트를 위한 작은 REST API입니다. 여기서는 2004년 이후의 모든 결과와 일부 통계/분석을 확인할 수 있습니다.
fecth draw의 엔드포인트에는 year
또는 dates
별로 추첨을 필터링하는 몇 가지 멋진 기능이 있습니다.
이는 이 데이터를 쉽게 얻을 수 있는 방법이 부족했기 때문에 수행되었습니다. 이 정보는 공개된 지식이므로 기관에서는 이에 대한 API를 제공해야 합니다. 한편, 이러한 엔드포인트를 통해 커뮤니티는 Euromillions 컨텍스트를 중심으로 모바일 앱이든 웹 앱이든 놀라운 제품을 구축할 수 있습니다.
내 목표는 또한 통계/분석을 기반으로 플레이할 숫자를 생성할 수 있는 웹 앱을 구축하는 것입니다.
문서화를 위해 우리는 OpenAPI 사양을 사용했습니다. 우리는 각 사용 사례에 대한 스키마와 예제가 포함된 사용 가능한 모든 엔드포인트를 보유하고 있습니다. 업계 표준으로 사용하기 때문일 뿐만 아니라 업데이트하고 읽기가 정말 쉽기 때문입니다.
데이터베이스와 관련하여 우리는 데이터베이스 마크업 언어(간단히 DBML)를 사용합니다. 다시 한 번 말하지만, 이는 정말 놀라운 일이며 새로운 조이너를 즉시 작업 속도에 끌어올릴 수 있습니다. 테이블 스키마를 시각화하는 온라인 도구도 있습니다.
여기에서 현재 문서를 확인할 수 있습니다 .
euromillions 추첨 결과를 보려면 웹사이트 https://www.euro-millions.com을 사용했습니다. 여기에는 기존의 모든 추첨 결과에 대한 과거 데이터가 포함된 페이지가 있습니다. 우리는 API를 사용하지 않고 필요한 특정 데이터에 대해 웹페이지를 구문 분석했습니다.
새로운 그리기를 위해 다음 cronjob이 실행됩니다.
# 매주 화요일과 금요일 21시~23시*/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를 실행하는 데 사용할 도커 이미지를 푸시하고 있습니다. Fly.io에서는 다양한 환경을 허용하지 않기 때문에 준비 및 제작을 위해 다양한 앱을 만들어야 했습니다. 이미지를 푸시하자마자 새 버전을 실행하려면 새 릴리스만 만들면 됩니다. 이제 API가 컨테이너에서 실행되어 배포 및 유지 관리가 더 쉬워졌기 때문에 이는 큰 개선입니다.
다행히 Terraform을 사용하여 코드로 Fly.io 인프라를 관리할 수 있습니다. 할 일이 많지 않기 때문에 지금은 Terraform을 사용하여 앱, 앱 공용 IP 및 도메인 인증서를 만듭니다. 데이터베이스의 경우 Fly.io에서는 여전히 terraform을 사용하여 관리할 수 없으므로 flyctl
사용하여 수동으로 생성해야 했습니다. 이는 해당 작업 영역이 있는 스테이징 및 프로덕션 워크플로의 CI에 통합됩니다.
이 프로젝트에서 로컬로 작업하는 방법에는 docker 또는 flash app 실행이라는 두 가지 방법이 있습니다.
시작하려면 저장소 복제를 시작하세요
자식 클론 https://github.com/pedro-mealha/euromillions-apicd euromillions-api
도커 컨테이너 빌드 및 시작
start_docker를 만드세요
그러면 postgres 데이터베이스가 있는 컨테이너와 Python 이미지가 있는 다른 컨테이너가 시작됩니다. Python 컨테이너에서는 모든 프로젝트 파일을 복사하고 요구 사항을 설치한 후 마지막으로 플라스크 앱을 실행합니다.
Python 3.12가 설치되어 있고 postgres 데이터베이스가 있는지 확인하십시오.
요구 사항을 설치합니다.
pip 설치 -r 요구사항.txt
플라스크 앱 실행
시작하다
마이그레이션에는 yoyo를 사용하고 있습니다. 정말 간단하지만 그럼에도 불구하고 Makefile에는 몇 가지 명령이 있습니다.
마이그레이션을 실행하려면 다음 안내를 따르세요.
이주하게 하다
마지막 마이그레이션을 롤백하려면 다음 안내를 따르세요.
migration_rollback을 만드세요
새로운 마이그레이션을 생성하는 것은 약간 까다롭습니다. 왜냐하면 .py 파일이 마음에 들지 않아 원시 SQL 파일을 사용하기로 결정했기 때문입니다. 하지만 이로 인해 새 파일을 수동으로 생성해야 하는 비용이 발생합니다.
이미 존재하는 패턴을 따르기만 하면 상당히 쉬울 것입니다.
MIT 라이센스(파일 라이센스).