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

  1. 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 --version

  2. Criaçã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/activate

  3. Instalaçã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:

    commands
    pip install fastapi[all] pymongo uvicorn

  4. 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'

  5. 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`.

    commands
    mkdir projeto_api
    cd projeto_api
    touch main.py models.py schemas.py repository.py routes.py

  6. Definindo 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.py
    from 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.py
    from pydantic import BaseModel
    
    class ProdutoSchema(BaseModel):
        nome: str
        preco: float
    

  7. 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.py
    from 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})
    

  8. 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.py
    from 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)
    

  9. 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.py
    from 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 --reload

  10. Testando 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.

Hashtags

#FastAPI #Python #MongoDB #APIs #DesenvolvimentoDeSoftware