13 puan yazan narubrown 2026-01-18 | 2 yorum | WhatsApp'ta paylaş
  • 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

2 yorum

 
bsh998 2026-01-20

Yapay zeka açıklamasını biraz düzelterek daha doğal cümlelerle yazarsanız güvenilirliğin artacağını düşünüyorum.

 
narubrown 2026-01-20

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.