- Spine est un framework web backend en Go qui expose explicitement le flux d’exécution au lieu de le masquer
- Un Pipeline unique possède l’ordre complet d’exécution, et le Controller se concentre uniquement sur la logique métier
- La signature de méthode constitue le contrat d’API, sans annotations ni automatisation basée sur des conventions
- L’ordre de traitement d’une requête est clairement visible dans le code
- L’accent est mis moins sur la productivité initiale que sur la maintenabilité à long terme et la facilité de suivi du flux d’exécution
- Echo est utilisé comme transport HTTP, avec une conception indépendante de l’ORM permettant de choisir librement Bun, GORM, etc.
Aperçu de Spine
Spine est un framework dont l’objectif est de rendre explicite le flux d’exécution des requêtes web
Là où la plupart des frameworks masquent l’ordre d’exécution pour plus de confort, Spine l’ancre dans la structure du code
Il vise une structure capable de répondre clairement à la question : « où commence la requête, qui la traite, et dans quel ordre s’exécute-t-elle ? »
Principes de conception
Politique sans magie
- Le Pipeline est le seul composant à connaître l’ordre d’exécution
- Les comportements qui « font les choses automatiquement » sont réduits au minimum
- Toute extension et toute exécution sont enregistrées explicitement et suivent un ordre prévisible
Contrat fondé sur la signature
- La signature de méthode constitue le contrat d’API
- La création des entrées est assurée par ArgumentResolver, et le traitement des sorties par ReturnValueHandler
- Les mappings par annotation et les inférences automatiques fondées sur des conventions sont exclus
Indépendance du Controller
- Le Controller ne dépend pas des types HTTP/transport
- Il n’utilise que des types sémantiques comme path., query., httperr.*
- Il ignore le modèle d’exécution, mais la source des entrées est explicitée par les types
Fonctionnalités principales
Routage et paramètres
- Prise en charge des Path Parameters (binding basé sur l’ordre)
- Utilitaires Query Values (parsing Int, String, Boolean)
- Binding automatique du Body DTO
Traitement des réponses
- Conversion automatique struct -> JSON via ReturnValueHandler
- Mapping automatique de error -> code de statut HTTP
- Types d’erreurs sémantiques comme httperr.NotFound, BadRequest, etc.
Préoccupations transverses
- Interceptor (PreHandle, PostHandle, AfterCompletion)
- Intercepteur CORS intégré
- Conteneur IoC basé sur les constructeurs
Architecture
- Séparation de la couche Transport (actuellement Echo, conçue pour être remplaçable)
- Conception indépendante de l’ORM (Bun, GORM, etc. peuvent être utilisés librement ⚠️ seule la compatibilité avec Bun a été vérifiée à ce jour)
Points forts en environnement de grande ampleur
Comme un seul acteur connaît l’ordre d’exécution, le coût de suivi du flux des requêtes diminue
Les préoccupations transverses comme le logging, les transactions et la sécurité ne sont placées que dans le Pipeline, ce qui rend prévisibles leur point d’application et leur timing ; c’est une stratégie qui renonce partiellement à la productivité initiale pour absorber structurellement la complexité croissante sur le long terme
Ce que Spine n’est pas
- Ce n’est pas un remplaçant de Spring/NestJS
- Ce n’est pas un framework visant à maximiser la productivité
- Ce n’est pas un framework d’automatisation basé sur les annotations
- Ce n’est pas un framework centré sur un moteur HTTP ou un routeur
Spine est un projet qui a besoin d’aide
Spine n’est pas encore un framework achevé ; de nombreuses parties ont été publiées volontairement dans un état inachevé
Il reste à vérifier si la structure est suffisamment explicable et si le modèle d’exécution met correctement en lumière les problèmes réels
Comment participer
- Mettre un ⭐️ sur GitHub pour suivre le projet
- Laisser une issue avec vos impressions ou vos questions après l’avoir essayé
- Laisser en commentaire vos critiques, suggestions ou questions sur la conception
Liens de référence
- Projet Spine : https://github.com/NARUBROWN/spine
- Démo utilisateur Spine + Bun ORM : https://github.com/NARUBROWN/spine-user-demo
2 commentaires
Je pense que la crédibilité serait renforcée si la description générée par l'IA était légèrement retouchée pour être formulée de manière plus naturelle.
Bonjour, merci beaucoup pour votre retour.
Quand vous dites que cela ressemble à de l’IA, vous parlez du post sur GeekNews ?
Je pensais qu’il fallait écrire comme ça ici ^^… Comme les autres posts étaient rédigés de cette manière, j’ai volontairement fait pareil.
https://spine.na2ru2.me/ko/
J’ai également ouvert un site pour apprendre Spine.
Si cela vous intéresse, n’hésitez pas à y jeter un œil, merci.