Esta API pública tem como objetivo disponibilizar, em tempo real, os dados de vitivinicultura fornecidos pela Embrapa Uva e Vinho. Os dados abrangem as seguintes áreas:
- Produção e comercialização de vinhos e derivados
- Processamento - quantidade de uvas processadas
- Importação e exportação de derivados de uva
- Consulta em tempo real dos dados de vitivinicultura
- API RESTful com endpoints padronizados
- Filtros por ano
- Respostas em formato JSON
- Python 3.11+
- FastAPI
- Alembic (para migrações de banco)
- BeautifulSoup (para web scraping)
- Uvicorn (servidor ASGI)
- Unittest (testes automatizados)
- Requests (para requisições HTTP)
- Pydantic (validação de dados)
- PostgreSQL (banco de dados relacional)
- SQLAlchemy (ORM)
O funcionamento da API segue a seguinte lógica:
-
Consulta primária ao site da Embrapa
Ao receber uma requisição, a API tenta acessar o site da Embrapa para realizar a raspagem (web scraping) dos dados de vitivinicultura. -
Raspagem bem-sucedida
Se a raspagem for concluída com sucesso:- Os dados extraídos são imediatamente retornados ao cliente solicitante.
- Simultaneamente, a API tenta armazenar os dados em um banco de dados local, com o objetivo de manter uma cópia para eventuais usos futuros (mecanismo de fallback).
-
Falha na raspagem — uso de fallback
Caso ocorra uma falha na raspagem (por exemplo, indisponibilidade do site da Embrapa ou erro de rede):- A API busca os dados previamente armazenados no banco de dados.
- Se os dados estiverem disponíveis no banco: eles são retornados ao cliente como resposta à requisição.
- Se os dados não estiverem disponíveis: a API informa ao cliente que não foi possível recuperar os dados solicitados no momento.
- A API busca os dados previamente armazenados no banco de dados.
Estrutura com os principais módulos e arquivos do projeto.
tech-challenge-1
├── alembic/
├── docker/
├── logs/
├── README.md
├── requirements.txt
├── src/
│ └── config/
│ └── filters/
│ └── raspagem/
│ └── respositories/
│ └── schemas/
│ └── services/
│ └── database.py
│ └── main.py
│ └── utils.py
└── tests/
└── raspagens/
└── services/
- Clone o repositório:
git clone https://github.com/djflucena/tech-challenge-1.git
cd tech-challenge-1/- Construir e iniciar os containers Docker:
docker-compose build --no-cache
docker-compose up -d- Criar e ativar ambiente virtual:
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows- Instalar dependências:
pip install -r requirements.txt- Iniciar o PostgreSQL localmente
- Garantir que DATABASE_URL aponte para o banco local
- Aplicar migrações alembic:
alembic upgrade head- Executar a API:
fastapi dev src/main.py- 🚀 A API estará disponível em: http://127.0.0.1:8000
- 📚 Documentação Swagger: http://127.0.0.1:8000/docs
- Para rodar os testes automatizados:
python -m unittestOs testes cobrem:
- Respostas dos endpoints
- Coleta e estruturação de dados da Embrapa
- Validação de erros e respostas inválidas
| Método | Rota | Descrição |
|---|---|---|
| GET | /producao/ |
Retorna dados de produção de vinhos, sucos e derivados |
| GET | /processamento/ |
Dados sobre a quantidade de uvas processadas |
| GET | /comercializacao/ |
Dados de comercialização de vinhos, sucos e derivados |
| GET | /importacao/ |
Dados de importação de derivados de uva |
| GET | /exportacao/ |
Dados de exportação de derivados de uva |
É possível acessar o banco de dados tanto no ambiente Dockerizado quanto no ambiente local, dependendo de como a aplicação foi executada.
Se você estiver rodando com Docker, o PostgreSQL estará dentro do container. Para acessá-lo:
docker exec -it tech-challenge-1_db_1 psql -U postgres -d vitiviniculturaSe estiver rodando a aplicação localmente com um PostgreSQL instalado na máquina:
- Conectar ao banco local (ajuste as credenciais conforme sua DATABASE_URL)
psql -U seu_usuario -d vitivinicultura -h localhost -WSubstitua
seu_usuariopelo usuário correto configurado no seu PostgreSQL local.
Após conectar ao banco, você pode usar os seguintes comandos para inspecionar a estrutura e os dados:
\dn \\ -- Listar esquemas
\dt vitivinicultura.* \\ -- Listar tabelas no esquema "vitivinicultura"
\dv vitivinicultura.* \\ -- Listar visões (views) no esquema "vitivinicultura"
\d+ vitivinicultura.* \\ -- Ver todas as tabelas, views, colunas e tipos no esquema "vitivinicultura"Esses comandos são úteis para validar a estrutura do banco, verificar registros e depurar problemas durante o desenvolvimento ou testes da API.
- Carlos Lessa - carlosvblessa
- David Lucena - djflucena
- Marcelo Malta - marcelotmalta
- Willian Alves - wbgalves