- Spine, çalışma akışını gizlemek yerine açıkça ortaya koyan Go tabanlı bir backend web framework'ü
- Tek bir Pipeline tüm yürütme sırasının sahibidir; Controller ise yalnızca iş mantığına odaklanır
- Metot imzası API sözleşmesinin kendisidir; annotation veya convention tabanlı otomasyon yoktur
- İstek sırası kod içinde açıkça görülebilir
- İlk üretkenlikten çok uzun vadeli bakım kolaylığına ve çalışma akışını izleme kolaylığına odaklanır
- HTTP Transport olarak Echo kullanır ve ORM'den bağımsız tasarımı sayesinde Bun/GORM gibi seçenekler özgürce tercih edilebilir
Spine'e Genel Bakış
Spine, web isteklerinin çalışma akışını açık biçimde görünür kılmayı hedefleyen bir framework'tür
Çoğu framework'ün kullanım kolaylığı için gizlediği yürütme sırasını kod yapısında sabitler
"İstek nerede başlıyor, kim işliyor ve hangi sırayla çalışıyor?" sorusuna net yanıt verebilen bir yapıyı hedefler
Tasarım İlkeleri
Sihir yok politikası
- Yürütme sırasını bilen tek bileşen Pipeline'dır
- "Kendiliğinden halleden" davranışlar en aza indirilir
- Tüm genişletmeler ve yürütmeler açıkça kaydedilir ve öngörülebilir bir sıraya sahiptir
İmza tabanlı sözleşme
- Metot imzası doğrudan API sözleşmesidir
- Girdi üretimini ArgumentResolver, çıktı işlemeyi ise ReturnValueHandler üstlenir
- Annotation tabanlı eşleme ve convention tabanlı otomatik çıkarım yasaktır
Controller bağımsızlığı
- Controller, HTTP/Transport tiplerine bağımlı değildir
- Yalnızca path., query., httperr.* gibi anlam tipleri kullanılır
- Yürütme modelini bilmez, ancak girdinin kaynağı tiplerle açıkça belirtilir
Başlıca Özellikler
Yönlendirme ve parametreler
- Path Parameter desteği (sıra tabanlı binding)
- Query Values yardımcıları (Int, String, Boolean parse etme)
- Body DTO için otomatik binding
Yanıt işleme
- ReturnValueHandler ile struct -> JSON otomatik dönüştürme
- error -> HTTP durum kodu otomatik eşleme
- httperr.NotFound, BadRequest gibi anlam tabanlı hata tipleri
Yatay kesen konular
- Interceptor (PreHandle, PostHandle, AfterCompletion)
- Yerleşik CORS Interceptor
- Constructor tabanlı IoC Container
Mimari
- Transport katmanı ayrıdır (şu anda Echo, ancak değiştirilebilir şekilde tasarlanmıştır)
- ORM'den bağımsız tasarım (Bun, GORM vb. serbestçe kullanılabilir ⚠️ şu anda yalnızca Bun ile uyumluluk doğrulandı)
Büyük Ölçekli Ortamlardaki Güçlü Yanları
Yürütme sırasını bilen özne yalnızca bir tane olduğu için istek akışını izleme maliyeti azalır
Logging, transaction ve security gibi yatay kesen konular yalnızca Pipeline'a yerleştirilir; bu sayede uygulama noktası ve zamanlaması öngörülebilir olur. İlk üretkenliğin bir kısmından vazgeçip uzun vadede artan karmaşıklığı yapıyla absorbe etmeyi amaçlayan bir stratejidir
Spine'in Olmadığı Şeyler
- Spring/NestJS'in alternatifi değildir
- Üretkenliği maksimize eden bir framework değildir
- Annotation tabanlı otomasyon framework'ü değildir
- HTTP Engine ya da Router merkezli bir framework değildir
Spine'in Yardıma İhtiyaç Duyduğu Projeler
Spine henüz tamamlanmış bir framework değildir; kasıtlı olarak birçok bölüm eksik halde yayımlandı
Yapının yeterince açıklanabilir olup olmadığı ve yürütme modelinin gerçek sorunları iyi ortaya koyup koymadığı doğrulanmalıdır
Katılma yolları
- GitHub'da ⭐️ vererek projeyi takip edin
- Kullanıp edindiğiniz izlenimleri veya soruları issue olarak bırakın
- Tasarıma dair eleştiri, öneri ve soruları yorum olarak paylaşın
İlgili bağlantılar
- Spine projesi: https://github.com/NARUBROWN/spine
- Spine + Bun ORM User Demo: https://github.com/NARUBROWN/spine-user-demo
2 yorum
Yapay zeka açıklamasını biraz düzelterek daha doğal cümlelerle yazarsanız güvenilirliğin artacağını düşünüyorum.
Merhaba, geri bildiriminiz için gerçekten çok teşekkür ederim.
AI gibi görünmesiyle GeekNews yazısını mı kastediyorsunuz?
Ben burada aslında böyle yazmak gerektiğini sanıyordum ^^… Diğer yazılar da böyle olduğu için özellikle bu şekilde yazdım.
https://spine.na2ru2.me/ko/
Ek olarak, spine öğrenebileceğiniz bir site de açtım.
İlginizi çekerse birlikte göz atın, teşekkürler.