Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang penghalaan dinamik dan proksi terbalik dalam rangka kerja Gin

Penjelasan terperinci tentang penghalaan dinamik dan proksi terbalik dalam rangka kerja Gin

WBOY
WBOYasal
2023-06-22 21:56:072044semak imbas

Rangka kerja Gin ialah rangka kerja Web yang ringan dalam bahasa Go Ia cekap, mudah digunakan dan pembangunan pesat, jadi ia digemari oleh ramai pembangun. Dalam rangka kerja Gin, penghalaan dinamik dan proksi terbalik ialah fungsi yang biasa digunakan, dan anda perlu memahami penggunaan terperincinya semasa melakukan pembangunan web.

1. Penghalaan dinamik

Dalam pembangunan web, secara amnya kita perlu mengedarkan dan memproses permintaan URL yang berbeza, yang memerlukan sokongan penghalaan dinamik. Dalam Gin, penggunaan asas penghalaan dinamik adalah seperti berikut:

1 Pengumpulan penghalaan

Penghimpunan penghalaan boleh membahagikan satu siri laluan kepada kumpulan yang berasingan untuk pengurusan dan kawalan yang mudah. Dalam Gin, gunakan penghala.Kaedah kumpulan untuk mengumpulkan:

r := gin.Default()
v1 := r.Group("/v1")
{
    v1.POST("/login", login)
    v1.GET("/profile", profile)
}
v2 := r.Group("/v2")
{
    v2.POST("/login", login)
    v2.GET("/profile", profile)
}

2 Tentukan laluan

Terdapat dua cara untuk menentukan laluan dalam Gin:

a. Mengendalikan Kaedah untuk menentukan laluan

router.Handle("GET", "/hello", func(context *gin.Context) {
        context.JSON(http.StatusOK, gin.H{
            "status": "success",
            "message": "Hello World!",
        })
})

b. Gunakan penghala.GET, penghala.POST dan kaedah lain untuk menentukan laluan

router.GET("/hello", func(context *gin.Context) {
        context.JSON(http.StatusOK, gin.H{
            "status": "success",
            "message": "Hello World!",
        })
})

3 selalunya diperlukan Untuk melakukan padanan parameter pada laluan, Gin boleh menangkap parameter dengan membalut nama parameter dengan pendakap kerinting {}. Kod sampel adalah seperti berikut:

router.GET("/user/:name", func(context *gin.Context) {
        name := context.Param("name")
        context.JSON(http.StatusOK, gin.H{
            "name": name,
        })
})

4 Parameter kumpulan penghalaan

Seperti yang dinyatakan di atas, pengelompokan penghalaan boleh membantu kami mengurus perkumpulan penghalaan Gin juga menyokong Tetapan kumpulan penghalaan. pelaksanaan khusus adalah seperti berikut:

v1 := router.Group("/api/v1/:category")
{
    v1.GET("/books", bookList)
    v1.GET("/books/:isbn", bookDetail)
    v1.POST("/books", createBook)
    v1.PUT("/books/:isbn", updateBook)
}

Pada masa ini, semua laluan kami dalam v1 boleh mendapatkan nilai parameter kategori.

2. Proksi terbalik

Proksi terbalik ialah teknologi proksi untuk pelayan web, terutamanya digunakan untuk pengoptimuman prestasi pelayan, pengimbangan beban, pemajuan permintaan dan senario lain. Dalam rangka kerja Gin, proksi terbalik dilaksanakan terutamanya melalui httputil.ReverseProxy Kaedah penggunaan adalah seperti berikut:

1 Tentukan kaedah proksi terbalik

func NewReverseProxy(target string) *httputil.ReverseProxy {
    url, _ := url.Parse(target)
    proxy := httputil.NewSingleHostReverseProxy(url)
    return proxy
}

2 🎜>

Apabila mentakrifkan laluan proksi terbalik dalam rangka kerja Gin, kita perlu mentakrifkannya sebagai jenis handlerFunc, kemudian lulus kaedah proksi terbalik yang ditakrifkan oleh NewReverseProxy, dan akhirnya menggunakan kaedah proksi.ServeHTTP untuk memajukan. Kod sampel adalah seperti berikut:

router.GET("/api/*path", func(context *gin.Context) {
        NewReverseProxy("http://localhost:8080").ServeHTTP(context.Writer, context.Request)
})

3. Tetapan parameter proksi songsang

Kami bukan sahaja boleh mentakrifkan satu kaedah proksi songsang, tetapi juga mentakrifkan parameter proksi songsang yang berbeza untuk setiap laluan. Kod sampel berikut:

var pathUrlMapping = map[string]string{
    "/api/search": "http://localhost:8080",
    "/api/report": "http://localhost:8081",
}

for path, url := range pathUrlMapping {
    r.GET(path, func(c *gin.Context) {
        proxy := NewReverseProxy(url)
        proxy.ServeHTTP(c.Writer, c.Request)
    })
}

Di atas ialah pengenalan terperinci kepada penggunaan penghalaan dinamik dan proksi terbalik dalam rangka kerja Gin. Melalui aplikasi fleksibel penggunaan lanjutan sedemikian, kami boleh menjalankan pembangunan dan penyelenggaraan Web dengan lebih mudah.

Atas ialah kandungan terperinci Penjelasan terperinci tentang penghalaan dinamik dan proksi terbalik dalam rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn