Introdução
Neste tutorial, você aprenderá a desenvolver uma API RESTful usando FastAPI, um framework moderno e rápido para construção de APIs em Python, e MongoDB, um banco de dados NoSQL popular. Vamos abordar desde a configuração do ambiente de desenvolvimento até a implementação de endpoints para realizar operações CRUD. Este guia é projetado para iniciantes que desejam explorar o desenvolvimento de APIs em Python e se familiarizar com as melhores práticas na construção de aplicações escaláveis e eficientes. Ao final, você terá uma API funcional e testada, pronta para ser expandida e integrada a outras aplicações.
Etapas
Configuração do Ambiente de Desenvolvimento
Antes de começarmos, certifique-se de que você tem o Python 3.7 ou superior instalado. Você também precisará ter o pip para gerenciar pacotes Python. Verifique as versões instaladas usando os comandos `python –version` e `pip –version`. Caso não tenha o Python instalado, escolha uma das opções de instalação disponíveis na documentação oficial do Python.
commands# Verificar versões instaladas
python --version
pip --versionCriação do Ambiente Virtual
Para garantir que as dependências do projeto não conflitam com outras aplicações, crie um ambiente virtual usando o venv. Navegue até o diretório do seu projeto e execute os seguintes comandos:
commands# Criar ambiente virtual
python -m venv venv
# Ativar ambiente virtual (Windows)
.\venv\Scripts\activate
# Ativar ambiente virtual (Linux/Mac)
source venv/bin/activateInstalação das Dependências
Agora, vamos instalar o FastAPI e o MongoDB usando o pip. O uvicorn será utilizado como servidor ASGI. Execute o seguinte comando:
commandspip install fastapi[all] pymongo uvicorn
Configuração do Banco de Dados MongoDB
Neste passo, você precisará de uma instância do MongoDB. Você pode usar o MongoDB Atlas para uma solução baseada na nuvem ou instalar o MongoDB localmente. Crie um banco de dados chamado `testdb` e uma coleção chamada `produtos` para armazenar nossos dados. Se estiver usando o MongoDB Atlas, obtenha a string de conexão e a configure no arquivo de configuração do seu projeto.
commands# Conexão com MongoDB
MONGO_CONNECTION_STRING = 'mongodb://localhost:27017/testdb'Criando a Estrutura do Projeto
Agora, crie a estrutura de diretórios para seu projeto com as seguintes pastas e arquivos: `main.py`, `models.py`, `schemas.py`, `repository.py`, e `routes.py`.
commandsmkdir projeto_api
cd projeto_api
touch main.py models.py schemas.py repository.py routes.pyDefinindo os Modelos e Esquemas
Implemente os modelos e esquemas necessários. Comece configurando o arquivo `models.py` para definir os dados da coleção `produtos` e crie `schemas.py` para validar esses dados utilizando Pydantic.
models.pyfrom pymongo import MongoClient class Produto: def __init__(self, nome: str, preco: float): self.nome = nome self.preco = preco client = MongoClient('mongodb://localhost:27017/') db = client['testdb']
schemas.pyfrom pydantic import BaseModel class ProdutoSchema(BaseModel): nome: str preco: float
Implementação do Repositório
Implemente a lógica de acesso aos dados no arquivo `repository.py`, que deve incluir métodos para criar, buscar, atualizar e excluir produtos.
repository.pyfrom models import db, Produto class ProdutoRepository: def create(self, produto): return db.produtos.insert_one(produto.__dict__) def find_all(self): return list(db.produtos.find()) def find_by_id(self, produto_id): return db.produtos.find_one({'_id': produto_id}) def update(self, produto_id, produto): db.produtos.update_one({'_id': produto_id}, {'$set': produto.__dict__}) def delete(self, produto_id): db.produtos.delete_one({'_id': produto_id})
Implementação das Rotas
Crie as rotas para a API no arquivo `routes.py`, que deve definir os endpoints para operações CRUD utilizando FastAPI.
routes.pyfrom fastapi import APIRouter from schemas import ProdutoSchema from repository import ProdutoRepository router = APIRouter() repository = ProdutoRepository() @router.post('/produtos') async def create_produto(produto: ProdutoSchema): return repository.create(produto) @router.get('/produtos') async def read_produtos(): return repository.find_all() @router.get('/produtos/{produto_id}') async def read_produto(produto_id: str): return repository.find_by_id(produto_id) @router.put('/produtos/{produto_id}') async def update_produto(produto_id: str, produto: ProdutoSchema): return repository.update(produto_id, produto) @router.delete('/produtos/{produto_id}') async def delete_produto(produto_id: str): return repository.delete(produto_id)
Integrando e Executando a API
No arquivo `main.py`, configure a aplicação FastAPI e registre as rotas criadas. Execute o servidor usando o uvicorn.
main.pyfrom fastapi import FastAPI from routes import router app = FastAPI() app.include_router(router) if __name__ == '__main__': import uvicorn uvicorn.run(app, host='0.0.0.0', port=8000)
commands# Executar a aplicação
uvicorn main:app --reloadTestando a API
Utilize Postman ou cURL para testar os endpoints da API. Você pode listar produtos, criar novos, atualizar e excluir existências.
curl_examples# Listar todos os produtos
curl -X GET http://localhost:8000/produtos
# Criar um novo produto
curl -X POST -H "Content-Type: application/json" -d '{"nome":"Novo Produto", "preco":99.99}' http://localhost:8000/produtos
Conclusão
Neste tutorial, você aprendeu como desenvolver uma API RESTful utilizando FastAPI e MongoDB. Desde a configuração do ambiente de desenvolvimento até a implementação de rotas e testes. Com essa base, você está capacitado para criar APIs modernas e escaláveis, explorando ainda mais funcionalidades do FastAPI e integrando com outras ferramentas e serviços. Continue praticando e expandindo suas habilidades para se tornar um desenvolvedor mais versátil em Python.