Servis iskeleti
- Go kursu
- İleri seviye
- Ders 43/68
- 6 dk
Mikroservis iskeletini ve katmanları tasarlarsın.
Proje: ürün servisi
Bu projede ürünleri listeleyen ve ekleyen küçük bir mikroservis kuracaksın. Kod üç katmana ayrılır:
- handler: HTTP isteğini okur, JSON yanıt yazar.
- service: iş kurallarını uygular (ör. fiyat negatif olamaz).
- repository: veriyi saklar (veritabanı ya da bellek).
Her katman bir alttakini arayüz üzerinden kullanır; böylece test ederken gerçek veritabanı gerekmez.
Klasör düzeni
Yaygın bir düzen:
urun-servisi/
cmd/server/main.go // bağlantıları kurar, sunucuyu başlatır
internal/urun/model.go // Urun türü
internal/urun/repo.go // Repository arayüzü ve uygulaması
internal/urun/service.go
internal/urun/handler.go
go.modinternal/ altındaki paketler modül dışından içe aktarılamaz; servis içi kodu dışarıya kapatır.
Uygulama Model ve arayüz
type Urun struct { ID int; Ad string; Fiyat float64 } ve type Repo interface { Ekle(u Urun) error; Liste() []Urun } tanımla. main içinde Urun{1, "Kalem", 12.5} değerini %+v ile yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Urun struct {
ID int
Ad string
Fiyat float64
}
type Repo interface {
Ekle(u Urun) error
Liste() []Urun
}
func main() {
fmt.Printf("%+v\n", Urun{1, "Kalem", 12.5})
}Beklenen çıktı
{ID:1 Ad:Kalem Fiyat:12.5}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 "Fiyat negatif olamaz" kuralı hangi katmana aittir?
- repository
- main
- service Doğru cevap
- handler
Açıklama: İş kuralları service katmanında durur; handler yalnızca HTTP'yi, repository yalnızca saklamayı bilir.
2 Gizli paketler
urun-servisi/
____/urun/service.go
urun-servisi/
internal/urun/service.go
Açıklama: internal klasörü, içindeki paketlerin yalnızca aynı modülden içe aktarılmasına izin verir.
3 Katman ve görevi
| Kavram | Anlamı |
|---|---|
handler |
HTTP ve JSON |
service |
İş kuralları |
repository |
Veri saklama |
cmd/server |
Bağlantıları kurar |