GoDasturchi
API Gateway Pattern

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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