- Spine adalah framework web backend berbasis Go yang menampilkan alur eksekusi secara eksplisit tanpa menyembunyikannya
- Satu Pipeline memiliki seluruh urutan eksekusi, dan Controller hanya fokus pada logika bisnis
- Signature method adalah kontrak API itu sendiri, tanpa otomatisasi berbasis anotasi atau konvensi
- Urutan request terlihat jelas di dalam kode
- Berfokus pada kemudahan pemeliharaan jangka panjang dan kemudahan menelusuri alur eksekusi dibanding produktivitas awal
- Menggunakan Echo sebagai HTTP Transport, dengan desain independen ORM sehingga bisa bebas memilih Bun/GORM dan lainnya
Gambaran Umum Spine
Spine adalah framework yang bertujuan menampilkan alur eksekusi request web secara eksplisit
Sebagian besar framework menyembunyikan urutan eksekusi demi kenyamanan, tetapi Spine menetapkannya dalam struktur kode
Berorientasi pada struktur yang dapat menjawab dengan jelas, "dari mana request dimulai, siapa yang menanganinya, dan dijalankan dalam urutan seperti apa"
Prinsip Desain
Kebijakan tanpa sihir
- Hanya ada satu komponen yang mengetahui urutan eksekusi, yaitu Pipeline
- Meminimalkan perilaku yang "menangani sendiri secara otomatis"
- Semua ekstensi dan eksekusi didaftarkan secara eksplisit dan memiliki urutan yang dapat diprediksi
Kontrak berbasis signature
- Signature method adalah kontrak API itu sendiri
- Pembuatan input ditangani oleh ArgumentResolver, dan pemrosesan output ditangani oleh ReturnValueHandler
- Pemetaan berbasis anotasi dan inferensi otomatis berbasis konvensi tidak diperbolehkan
Independensi Controller
- Controller tidak bergantung pada tipe HTTP/Transport
- Hanya menggunakan tipe semantik seperti path., query., httperr.*
- Tidak perlu mengetahui model eksekusi, tetapi sumber input dinyatakan lewat tipe
Fitur Utama
Routing dan parameter
- Mendukung Path Parameter (binding berbasis urutan)
- Utilitas Query Values (parsing Int, String, Boolean)
- Binding otomatis Body DTO
Pemrosesan respons
- Konversi otomatis struct -> JSON melalui ReturnValueHandler
- Pemetaan otomatis error -> kode status HTTP
- Tipe error berbasis semantik seperti httperr.NotFound, BadRequest
Cross-cutting concerns
- Interceptor (PreHandle, PostHandle, AfterCompletion)
- CORS Interceptor bawaan
- IoC Container berbasis konstruktor
Arsitektur
- Pemisahan lapisan Transport (saat ini Echo, dirancang agar bisa diganti)
- Desain independen ORM (bebas menggunakan Bun, GORM, dll. ⚠️ saat ini kompatibilitas baru dikonfirmasi untuk Bun)
Kekuatan di lingkungan skala besar
Karena hanya ada satu pihak yang mengetahui urutan eksekusi, biaya pelacakan alur request berkurang
Cross-cutting concerns seperti logging, transaction, dan security hanya ditempatkan di Pipeline sehingga titik penerapan dan waktunya dapat diprediksi; strategi ini mengorbankan sebagian produktivitas awal untuk menyerap kompleksitas yang meningkat dalam jangka panjang melalui struktur
Yang bukan Spine
- Bukan pengganti Spring/NestJS
- Bukan framework untuk memaksimalkan produktivitas
- Bukan framework otomatisasi berbasis anotasi
- Bukan framework yang berpusat pada HTTP Engine atau Router
Proyek yang membutuhkan bantuan untuk Spine
Spine belum merupakan framework yang selesai, dan sengaja dirilis dalam keadaan banyak bagian masih belum lengkap
Perlu divalidasi apakah strukturnya sudah cukup mudah dijelaskan, dan apakah model eksekusinya benar-benar menampilkan masalah nyata dengan baik
Cara berpartisipasi
- Tekan ⭐️ di GitHub untuk mengikuti proyek ini
- Coba gunakan lalu tinggalkan kesan atau pertanyaan Anda sebagai issue
- Tinggalkan kritik, saran, atau pertanyaan tentang desain di kolom komentar
Tautan referensi
- Proyek Spine: https://github.com/NARUBROWN/spine
- Demo pengguna Spine + Bun ORM: https://github.com/NARUBROWN/spine-user-demo
2 komentar
Sepertinya tingkat kepercayaannya akan meningkat jika penjelasan AI sedikit diperbaiki dan ditulis dengan kalimat yang lebih natural.
Halo, terima kasih banyak atas masukannya.
Apakah yang Anda maksud terdengar seperti AI adalah tulisan di GeekNews?
Saya kira memang seharusnya menulis seperti ini di sini ^^… karena tulisan lain juga seperti ini, jadi saya sengaja menulisnya seperti ini.
https://spine.na2ru2.me/ko/
Selain itu, saya juga telah membuka situs untuk belajar spine.
Kalau Anda tertarik, silakan lihat juga. Terima kasih.