Skip to content

Desenvolvimento

Esta seção descreve o processo de desenvolvimento para a API de Gerenciamento de Carros, incluindo práticas recomendadas, ferramentas e workflows.

Ambiente de Desenvolvimento

Configuração Inicial

Para configurar seu ambiente de desenvolvimento:

  1. Clone o repositório:

    git clone <URL_DO_REPOSITORIO>
    cd car_api
    

  2. Instale as dependências:

    poetry install
    

  3. Ative o ambiente virtual:

    poetry shell
    

  4. Configure as variáveis de ambiente:

    cp .env.example .env
    # Edite .env com as configurações apropriadas
    

  5. Execute as migrações do banco de dados:

    alembic upgrade head
    

Execução em Desenvolvimento

Para executar a aplicação em modo de desenvolvimento com recarga automática:

poetry run fastapi dev car_api/app.py

Ou alternativamente:

poetry run uvicorn car_api.app:app --reload --host 0.0.0.0 --port 8000

Ferramentas de Desenvolvimento

FastAPI

O framework FastAPI é usado para criar a API REST. Algumas de suas funcionalidades importantes incluem:

  • Tipagem de dados: Utiliza Pydantic para validação e serialização
  • Documentação automática: Gera automaticamente documentação Swagger e ReDoc
  • Assincronicidade: Suporte nativo a funções assíncronas
  • Injeção de dependências: Sistema poderoso de injeção de dependências

SQLAlchemy

Utilizado como ORM (Object-Relational Mapping) para interação com o banco de dados:

  • Suporte a múltiplos bancos: SQLite, PostgreSQL, MySQL
  • Assincronicidade: Compatível com drivers assíncronos
  • Tipagem: Totalmente compatível com type hints do Python

Pydantic

Responsável pela validação de dados e serialização:

  • Validação automática: Validação baseada em type hints
  • Transformação de dados: Conversão automática entre tipos
  • Performance: Alta performance graças ao uso de Rust em alguns componentes

Ruff

Linter e formatador de código Python:

  • Alta velocidade: Muito mais rápido que outros linters
  • Integração com editor: Funciona com a maioria dos editores de texto
  • Compatibilidade: Compatível com flake8, isort, pydocstyle, e outros

Práticas de Desenvolvimento

Ciclo de Desenvolvimento

  1. Planejamento: Defina os requisitos e escopo da funcionalidade
  2. Criação de branch: Crie uma branch para a nova funcionalidade
  3. Codificação: Implemente a funcionalidade seguindo os padrões do projeto
  4. Testes: Escreva e execute testes para garantir qualidade
  5. Formatação: Formate o código usando as ferramentas do projeto
  6. Commit: Faça commits com mensagens claras e descritivas
  7. Pull Request: Abra um PR para revisão de código
  8. Revisão: Receba feedback e faça as alterações necessárias
  9. Merge: Após aprovação, merge na branch principal

Padrões de Codificação

Siga os padrões estabelecidos no projeto:

  • PEP 8: Siga as convenções de estilo do Python
  • Tipagem: Use type hints sempre que possível
  • Nomenclatura: Use nomes descritivos para variáveis, funções e classes
  • Comentários: Comente decisões complexas ou não óbvias
  • Docstrings: Documente funções públicas com docstrings

Versionamento de Código

  • Git Flow: Use branches para features, releases e hotfixes
  • Commits semânticos: Siga o padrão de commits semânticos
  • Pull Requests: Sempre use PRs para revisão de código

Estrutura de Desenvolvimento

Adicionando Novas Funcionalidades

Para adicionar uma nova funcionalidade à API:

  1. Modelo: Crie o modelo SQLAlchemy em car_api/models/
  2. Schema: Defina os esquemas Pydantic em car_api/schemas/
  3. Rota: Crie o endpoint em car_api/routers/
  4. Testes: Escreva testes em tests/
  5. Documentação: Atualize a documentação conforme necessário

Exemplo de Adição de Funcionalidade

Suponha que você queira adicionar um novo recurso para gerenciar categorias de carros:

  1. Modelo (car_api/models/categories.py):

    class Category(Base):
        __tablename__ = 'categories'
    
        id: Mapped[int] = mapped_column(primary_key=True)
        name: Mapped[str] = mapped_column(String(50), unique=True)
        description: Mapped[Optional[str]] = mapped_column(Text)
    

  2. Schema (car_api/schemas/categories.py):

    class CategorySchema(BaseModel):
        name: str
        description: Optional[str] = None
    
    class CategoryPublicSchema(BaseModel):
        model_config = ConfigDict(from_attributes=True)
        id: int
        name: str
        description: Optional[str] = None
    

  3. Rota (car_api/routers/categories.py):

    @router.post('/', response_model=CategoryPublicSchema)
    async def create_category(
        category: CategorySchema,
        db: AsyncSession = Depends(get_session)
    ):
        db_category = Category(**category.model_dump())
        db.add(db_category)
        await db.commit()
        await db.refresh(db_category)
        return db_category
    

Ferramentas de Apoio

Debugging

  • Logs: Use logging apropriado para debugar problemas
  • FastAPI Debug Mode: Ative o modo debug para informações detalhadas
  • Pydantic Validation Errors: Leia cuidadosamente mensagens de erro de validação

Profiling

Para analisar o desempenho da aplicação:

# Instale ferramentas de profiling
poetry add py-spy --group dev

# Execute profiling
py-spy top --pid <PID_DA_APLICACAO>

Monitoramento

Considere implementar monitoramento para:

  • Métricas de desempenho: Tempo de resposta, throughput
  • Erros: Frequência e tipos de erros
  • Uso de recursos: CPU, memória, banco de dados

Melhorias de Desenvolvimento

Performance

  • Consulta eficiente: Use eager loading para evitar N+1 queries
  • Cache: Implemente cache para dados frequentemente acessados
  • Indexação: Adicione índices apropriados no banco de dados
  • Paginação: Sempre implemente paginação para endpoints de listagem

Segurança

  • Validação rigorosa: Valide todos os dados de entrada
  • Sanitização: Sanitize dados de saída quando apropriado
  • Atualizações: Mantenha dependências atualizadas
  • Auditoria: Implemente logging de ações críticas

Manutenibilidade

  • Código limpo: Escreva código legível e bem documentado
  • Testes: Mantenha cobertura de testes alta
  • Refatoração: Refatore código duplicado ou complexo
  • Documentação: Atualize documentação com mudanças de comportamento

Integração Contínua

O projeto pode ser configurado com CI/CD pipelines para:

  • Testes automatizados: Execução de testes em cada commit
  • Linting: Verificação de padrões de código
  • Build: Compilação e empacotamento da aplicação
  • Deploy: Implantação automatizada em ambientes de teste e produção

Dicas de Desenvolvimento

Produtividade

  • Atalhos de teclado: Aprenda atalhos do seu editor
  • Snippets: Use snippets para código repetido
  • Atalhos do terminal: Aprenda comandos úteis do terminal
  • Ambientes virtuais: Use Poetry para gerenciar dependências

Colaboração

  • Code reviews: Revise código de colegas e peça revisões
  • Comunicação: Comunique mudanças significativas à equipe
  • Documentação: Mantenha a documentação atualizada
  • Issues: Use issues para rastrear tarefas e bugs

Aprendizado Contínuo

  • Leitura: Mantenha-se atualizado com as últimas práticas
  • Experimentação: Teste novas bibliotecas e ferramentas
  • Feedback: Peça e forneça feedback construtivo
  • Comunidade: Participe de comunidades de desenvolvedores