O principal objetivo dessa API REST é calcular a distância entre um ponto específico (latitude, longitude) e o transporte público mais próximo.
Usando como base:
Framework FastAPI:
Documentação: https://fastapi.tiangolo.com
Código Fonte: https://github.com/tiangolo/fastapi
GeoPandas:
Documentação: https://geopandas.org/en/stable/
Código Fonte: https://github.com/geopandas/geopandas
Dados:
Shapefiles: https://geosampa.prefeitura.sp.gov.br/PaginasPublicas/_SBC.aspx
Local 🥉 :
Recomendo utilizar um virtualenv.
Instalação dos pacotes:
poetry install
ou
pip install --no-cache-dir --upgrade -r requirements.txt
Run:
uvicorn api_distance_public_transportation.main:app --reload
Documentação 👇
http://127.0.0.1:8000/docs
http://127.0.0.1:8000/redoc
Docker 🥈 :
Build e Run:
docker build -t {name_docker} . docker run -p 8080:8080 {name_docker}
Documentação 👇
http://127.0.0.1:8080/docs
http://127.0.0.1:8080/redoc
K8s 🥇 :
Eu usei o Minikube então pode ser necessário adaptar dependendo do caso.
Algumas configurações interessantes se for usar Minikube:
minikube start minikube addons enable ingress alias kubectl="minikube kubectl --"
Criando nossos recursos no K8s:
kubectl apply -f k8s/kube_deployment.yaml
Pegando informações do nosso ingress:
kubectl get ingress
Utilizando a IP do ADDRESS podemos acessar a aplicação.
Documentação 👇
http://192.168.49.2/docs
http://192.168.49.2/redoc
Observação usamos uma imagem no DockerHub 👉 bmesquitaa
Request body
{ "lat": -23.563949, "lon": -46.6568110 }
Responses
{ "estacao_metro_km": 0.45, "estacao_trem_km": 3.31, "ponto_onibus_km": 0.26, "terminal_onibus_km": 2.35 }