API Gateway Pattern
API Gateway naqshi
Katta biznes markazining bitta bosh kirish eshigini tasavvur qiling: tashrif buyuruvchi to'g'ridan-to'g'ri har bir bo'limga (buxgalteriya, kadrlar, ombor) alohida kirish joyidan kirmaydi — u BITTA eshikdan kiradi, va qabulxona uni kerakli bo'limga yo'naltiradi. API Gateway — mikroservislar dunyosida aynan shu "bosh eshik" va "qabulxona" vazifasini bajaradi.
package main
import "fmt"
type Service interface {
Handle(path string) (string, bool)
}
type OrderService struct{}
func (s *OrderService) Handle(path string) (string, bool) {
if path == "/orders" {
return "buyurtmalar ro'yxati", true
}
return "", false
}
type UserService struct{}
func (s *UserService) Handle(path string) (string, bool) {
if path == "/users" {
return "foydalanuvchilar ro'yxati", true
}
return "", false
}
// Gateway: kelgan so'rovni to'g'ri servisga yo'naltiradi
type Gateway struct {
services []Service
}
func (g *Gateway) Route(path string) string {
for _, s := range g.services {
if resp, ok := s.Handle(path); ok {
return resp
}
}
return "404: xizmat topilmadi"
}
func main() {
gw := &Gateway{services: []Service{&OrderService{}, &UserService{}}}
fmt.Println(gw.Route("/users"))
fmt.Println(gw.Route("/unknown"))
}Gateway.Route — foydalanuvchidan (yoki mijoz ilovasidan) kelgan BITTA so'rovni, uning yo'liga (path) qarab, to'g'ri servisga yo'naltiradi. Mijoz tomondan qaraganda, u faqat BITTA manzilga (gateway'ga) murojaat qiladi — qancha va qaysi mikroservis borligi, ularning aniq manzillari — bularning barchasi mijozdan yashiringan. Bu "Facade" naqshining (murakkab tizimni sodda, yagona interfeys ortida yashirish) mikroservislar arxitekturasidagi ko'rinishi.
API Gateway ko'pincha yo'naltirishdan tashqari, boshqa umumiy vazifalarni ham bajaradi: autentifikatsiya ("Middleware: Authentication" darsida ko'rgan naqsh — bir marta gateway'da tekshirilib, har bir alohida servisda takrorlanmaydi), tezlikni cheklash ("Project: Rate Limiter"), va so'rovlarni loglash — bularning barchasini har bir mikroservisda alohida-alohida yozish o'rniga, bitta markazda amalga oshirish mumkin.
>_ Exercise
Gateway'ga uchinchi servisni qo'shing.
- •PaymentService struct'ini yozing: Handle("/payments") — "to'lovlar ro'yxati" qaytarsin
- •Gateway'ga PaymentService'ni qo'shib, Route("/payments") natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
API Gateway — mijozlar uchun yagona kirish nuqtasi, so'rovlarni to'g'ri mikroservisga yo'naltiradi va autentifikatsiya, loglash kabi umumiy vazifalarni markazlashtiradi.
NEXT UP
Retry with Exponential Backoff
$ go run main.go
Kodingizni ishga tushiring