Vale a pena dar uma olhada no Litestar
(b-list.org)- Litestar é uma joia menos conhecida entre os frameworks web assíncronos de Python
- Graças à rápida escalabilidade e à arquitetura flexível, pode ser aplicado com facilidade a vários tipos de projeto
- Oferece modelagem de dados sem dependência de bibliotecas específicas, como Pydantic
- Tem uma excelente integração com SQLAlchemy, com pontos fortes na conexão e no gerenciamento de banco de dados
- Com recursos nativos práticos como autenticação, cache, logging e monitoramento, pode ser usado diretamente em projetos reais
Visão geral do Litestar
- Nos últimos anos, frameworks web Python async-first e baseados em type hints ganharam destaque, e o Litestar foi um deles escolhido para acumular experiência de uso
- À medida que foi adotado como framework principal em vários projetos reais, a confiança nessa escolha só aumentou
- Como muitos desenvolvedores web Python ainda não conhecem o Litestar, este texto apresenta suas principais vantagens e diferenciais
Exemplos e comparação com outros frameworks
-
O Litestar permite escrever com facilidade até mesmo uma aplicação web de arquivo único muito simples
- O route decorator é uma função independente, não vinculada ao objeto da aplicação
- No código de exemplo, ao acessar
/greet?name=Bob, o retorno é “Hi, Bob!” - Se um parâmetro obrigatório estiver ausente, uma resposta 400 é fornecida automaticamente
-
Diferentemente de microframeworks Python tradicionais como Flask e FastAPI, o Litestar tem características estruturais que permitem escalar de forma natural em projetos de vários tamanhos
- Em Flask ou FastAPI, os decorators de rota ficam vinculados ao objeto da aplicação, o que pode gerar problemas de importação circular ao separar em vários arquivos
- Em geral, é preciso usar um registro de rotas subordinado (no Flask/Quart,
blueprint; no FastAPI,APIRouteretc.), o que eleva a barreira de entrada ou exige mudanças na estrutura - Já no Litestar, como o decorator é uma função independente, a transição entre um app de arquivo único e uma estrutura distribuída de grande porte é bem mais simples
-
Graças à arquitetura básica e à forma como a documentação é organizada no Litestar, é possível apresentar desde muito cedo os conceitos de roteadores e agrupamento de funcionalidades, o que facilita manter consistência mesmo em APIs complexas
- Injeção de dependências, permissões e compartilhamento de config por rota são pontos fortes da sua composability
- Também é possível registrar a mesma rota várias vezes para aplicar autenticação ou dependências diferentes conforme o ambiente
Modelagem sem dependência de Pydantic
-
FastAPI e outros frameworks têm forte dependência de dados em Pydantic
- O Pydantic é forte em validação e serialização de dados baseadas em tipos, mas a integração direta com ORM (SQLAlchemy) é difícil
- Na prática, isso traz o incômodo de precisar escrever separadamente os modelos SQLAlchemy e os modelos Pydantic
-
O Litestar oferece suporte genérico não só a Pydantic, mas também a dataclasses, msgspec, attrs e modelos SQLAlchemy, entre outros tipos
- Conta com um protocolo de plugin de serialização, aumentando a extensibilidade
- Inclui extração automática de DTO (objeto de transferência de dados), de modo que, ao alterar apenas a classe de dados original, o DTO é refletido automaticamente
- Também é simples declarar exclusão ou inclusão parcial de campos, mapeamento de nomes e DTOs para atualização parcial
- Assim, é possível evitar declarações duplicadas de campos de modelo e erros frequentes no processo de sincronização manual
Integração com SQLAlchemy e introdução ao Advanced Alchemy
-
O SQLAlchemy ORM é, na prática, o padrão de fato para integração com banco de dados em Python
- O Litestar se destaca muito em integração, com serialização automática de esquemas do SQLAlchemy, automação de DTO, plugin de gerenciamento de sessão e plugins compostos
-
A biblioteca Advanced Alchemy (mantida pela equipe do Litestar) amplia os recursos do SQLAlchemy
- Ela oferece várias melhorias de qualidade, como PKs grandes agnósticas ao banco, timestamps automáticos, chaves UUID, tipo JSON, integração com migrações Alembic e Seed/Export
- Um recurso particularmente notável é o suporte à abstração de repository e service layer, fornecendo automaticamente várias funções de repositório, como CRUD e paginação
- Em frameworks que, ao contrário do Django, oferecem menos orientação estrutural, isso cria uma forma de organização recomendável para adotar repository/service layer
Outras características e recursos nativos
- O Litestar também fornece internamente sistema de autenticação (funções guard, middleware), cache (stores), logging, respostas de erro padronizadas, métricas baseadas em Prometheus/OpenTelemetry e suporte a htmx
- Ao contrário de outros microframeworks, em algumas implementações não é necessário procurar bibliotecas externas separadas nem escrever glue code customizado
- Mantendo a simplicidade de um "microframework", ele ainda permite usar imediatamente extensões ou recursos adicionais quando necessário
- Mais do que um substituto para Django/Flask, a ideia é incorporar de forma Pythonic pontos fortes de frameworks de outras linguagens, como o Java Spring Boot (estrutura inicial + conveniência)
- No geral, é uma opção com alta produtividade e vantagens estruturais para desenvolvimento web em Python no mundo real
Conclusão
- O Litestar surge como um framework que qualquer desenvolvedor Python web deveria considerar pelo menos uma vez, graças ao seu modelo assíncrono, tipado, com expansão flexível, modelagem de dados menos acoplada, excelente ORM e recursos nativos robustos
- Com o uso repetido em projetos reais, foi possível confirmar sua alta produtividade e manutenibilidade em diversos contextos, incluindo startups
- A expectativa é que desenvolvedores considerem o Litestar como uma das opções ao planejar seu próximo projeto web em Python
2 comentários
A questão do "import circular" em Python não tem uma solução bem definida? Fica um pouco difícil considerar isso um problema grave.
Comentário no Hacker News
@post("/route", exception_handlers={...})parece meio estranho. Espero que no futuro haja ferramentas nativas melhores e uma experiência de desenvolvimento mais refinada@postformmsgspece ao roteamento aninhado baseado em Controller. Recomendo fortementeasyncpg