- Spine é um framework web backend baseado em Go que expõe explicitamente o fluxo de execução, sem escondê-lo
- Um único Pipeline controla toda a ordem de execução, e o Controller foca apenas na lógica de negócio
- A assinatura do método é o próprio contrato da API, sem automação baseada em anotações ou convenções
- A ordem das requisições fica claramente visível no código
- O foco está menos na produtividade inicial e mais na manutenibilidade de longo prazo e na facilidade de rastrear o fluxo de execução
- Usa o Echo como HTTP Transport e tem um design independente de ORM, permitindo escolher livremente entre Bun, GORM etc.
Visão geral do Spine
Spine é um framework que tem como objetivo expor explicitamente o fluxo de execução de requisições web
Enquanto a maioria dos frameworks esconde a ordem de execução em nome da conveniência, o Spine a fixa na estrutura do código
Ele é orientado a uma estrutura capaz de responder com clareza: “onde a requisição começa, quem a processa e em que ordem tudo é executado”
Princípios de design
Política sem mágica
- O Pipeline é o único componente que conhece a ordem de execução
- Comportamentos que “fazem tudo sozinhos” são minimizados
- Toda extensão e execução é registrada explicitamente e segue uma ordem previsível
Contrato baseado em assinatura
- A assinatura do método é o próprio contrato da API
- A criação de entradas fica a cargo do ArgumentResolver, e o tratamento das saídas fica com o ReturnValueHandler
- Mapeamento baseado em anotações e inferência automática baseada em convenções são proibidos
Independência do Controller
- O Controller não depende de tipos HTTP/Transport
- Usa apenas tipos semânticos como path., query. e httperr.*
- Ele não conhece o modelo de execução, mas a origem das entradas é explicitada por tipo
Principais recursos
Roteamento e parâmetros
- Suporte a Path Parameter (binding baseado em ordem)
- Utilitário Query Values (parsing de Int, String e Boolean)
- Binding automático de Body DTO
Tratamento de respostas
- Conversão automática de struct -> JSON com ReturnValueHandler
- Mapeamento automático de error -> código de status HTTP
- Tipos de erro semânticos como httperr.NotFound e BadRequest
Interesses transversais
- Interceptor (PreHandle, PostHandle, AfterCompletion)
- CORS Interceptor embutido
- IoC Container baseado em construtor
Arquitetura
- Separação da camada de Transport (atualmente Echo, com design pensado para substituição)
- Design independente de ORM (Bun, GORM etc. podem ser usados livremente ⚠️ no momento, a compatibilidade foi verificada apenas com Bun)
Pontos fortes em ambientes de grande escala
Como existe apenas um responsável por conhecer a ordem de execução, o custo de rastrear o fluxo de requisições é reduzido
Interesses transversais como logging, transações e segurança são posicionados apenas no Pipeline, tornando previsíveis o ponto de aplicação e o momento de execução; a estratégia é abrir mão de parte da produtividade inicial para absorver, por meio da estrutura, a complexidade que cresce no longo prazo
O que o Spine não é
- Não é um substituto para Spring/NestJS
- Não é um framework voltado à máxima produtividade
- Não é um framework de automação baseado em anotações
- Não é um framework centrado em HTTP Engine ou Router
Um projeto em que o Spine ainda precisa de ajuda
O Spine ainda não é um framework finalizado e foi publicado intencionalmente com muitas partes ainda inacabadas
É preciso validar se a estrutura é suficientemente explicável e se o modelo de execução realmente revela bem os problemas do mundo real
Como participar
- Dê uma ⭐️ no GitHub para acompanhar o projeto
- Experimente e deixe suas impressões ou dúvidas em uma issue
- Deixe críticas, sugestões ou perguntas sobre o design nos comentários
Links de referência
- Projeto Spine: https://github.com/NARUBROWN/spine
- Demo de usuário com Spine + Bun ORM: https://github.com/NARUBROWN/spine-user-demo
2 comentários
Se vocês ajustarem um pouco a descrição gerada por IA para ficar mais natural, acho que a credibilidade pode aumentar.
Olá, muito obrigado pelo feedback.
Você quer dizer que parece IA no texto do GeekNews?
Achei que aqui era para escrever assim mesmo ^^… Como os outros textos também eram assim, escrevi de propósito desse jeito.
https://spine.na2ru2.me/ko/
Além disso, também criei um site onde é possível aprender
spine.Se tiver interesse, dê uma olhada também. Obrigado.