Dengan pembangunan berterusan teknologi Internet, dalam aplikasi Web, gaya seni bina RESTful secara beransur-ansur menjadi standard de facto untuk reka bentuk API Web. Dalam proses itu, rangka kerja Gin telah menjadi pilihan popular untuk melaksanakan reka bentuk API RESTful. Dalam artikel ini, kami akan memperkenalkan pengetahuan asas menggunakan rangka kerja Gin untuk melaksanakan reka bentuk API RESTful, termasuk cara mendapatkan prestasi dan kebolehskalaan yang baik melalui pelaksanaan rangka kerja Gin.
1. Apakah reka bentuk RESTful API?
RESTful API ialah kaedah reka bentuk perkhidmatan Web berdasarkan protokol HTTP. Ia dicirikan dengan mensimulasikan sumber dalam aplikasi web melalui protokol HTTP, sambil menyediakan antara muka permintaan dan tindak balas HTTP standard.
Reka bentuk API RESTful ialah cara asas mereka bentuk aplikasi web. Teras API RESTful ialah sumber, yang diakses melalui kaedah HTTP, seperti GET, POST, PUT dan DELETE. Setiap sumber boleh dikenal pasti dengan URI. Cara membuat, mengemas kini dan memadam sumber dilakukan melalui permintaan kaedah HTTP standard, seperti POST, PUT atau DELETE. Untuk mengakses sumber, anda boleh menggunakan kaedah HTTP GET.
2. Gunakan rangka kerja Gin untuk melaksanakan reka bentuk API RESTful
Rangka kerja Gin ialah rangka kerja Web yang cekap dengan prestasi dan kebolehskalaan yang baik. Terutamanya dalam bahasa Golang, prestasi cemerlang Gin menjadikannya rangka kerja pilihan untuk reka bentuk API RESTful.
Sebelum anda mula menggunakan rangka kerja Gin, anda perlu terlebih dahulu memasang rangka kerja Gin dalam persekitaran pembangunan. Rangka kerja Gin boleh dipasang menggunakan arahan go melalui arahan berikut.
go get -u github.com/gin-gonic/gin
Rangka kerja Gin menyediakan fungsi penghalaan asas, yang boleh menggunakan fungsi pemprosesan permintaan GET, POST, PUT dan DELETE.
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/hello", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Hello, Gin!", }) }) router.Run() }
Dalam contoh di atas, laluan dibuat yang bertindak balas kepada permintaan untuk laluan /hello menggunakan kaedah GET.
Apabila memproses permintaan HTTP, kita selalunya perlu mendapatkan parameter daripada permintaan HTTP. Melalui rangka kerja Gin, parameter ini boleh diekstrak dengan mudah daripada permintaan HTTP.
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.JSON(200, gin.H{ "message": "Hello, " + name + "!", }) }) router.Run() }
Dalam contoh di atas, laluan dibuat yang mengembalikan nama pengguna melalui parameter pertanyaan. Dalam contoh ini, :name mewakili parameter dinamik yang akan diekstrak daripada setiap permintaan semasa masa jalan. Parameter yang diekstrak boleh diperoleh menggunakan c.Param("nama").
Rangka kerja Gin menyediakan kefungsian kumpulan laluan, yang bermaksud laluan boleh dikumpulkan dalam contoh penghala yang sama. Kumpulan laluan membolehkan anda mengumpulkan laluan dan membolehkan penggunaan semula kod.
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() api := router.Group("/api") { api.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.JSON(200, gin.H{ "message": "Hello, " + name + "!", }) }) api.GET("/user/:name/*action", func(c *gin.Context) { name := c.Param("name") action := c.Param("action") message := name + " " + action c.JSON(200, gin.H{ "message": message, }) }) } router.Run() }
Dalam contoh di atas, kumpulan laluan dibuat yang mengandungi laluan yang mengendalikan sumber pengguna. Kumpulan penghalaan boleh dikumpulkan dalam contoh penghala yang sama.
Rangka kerja Gin menyediakan mekanisme middleware, yang bermaksud bahawa kod yang ditentukan boleh dilaksanakan sebelum atau selepas fungsi pengendali laluan. Dengan menggunakan perisian tengah, banyak fungsi yang berbeza boleh dicapai. Contohnya, sahkan bahawa pengguna telah log masuk, log permintaan, tambahkan pengepala merentas domain daripada pengepala, dsb.
package main import ( "time" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 添加全局中间件 router.Use(LoggerMiddleware) api := router.Group("/api") { // 添加路由级中间件 api.Use(AuthMiddleware) api.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.JSON(200, gin.H{ "message": "Hello, " + name + "!", }) }) } router.Run() } // 日志中间件 func LoggerMiddleware(c *gin.Context) { t := time.Now() // 可以通过c.Request获取HTTP请求的信息 path := c.Request.URL.Path raw := c.Request.URL.RawQuery // 执行处理函数 c.Next() // 可以通过c.Writer获取响应信息 latency := time.Since(t) status := c.Writer.Status() log.Println(path, latency, status, raw) } // 认证中间件 func AuthMiddleware(c *gin.Context) { // 执行认证逻辑 }
Dalam contoh di atas, perisian tengah pengelogan dan perisian tengah pengesahan dilaksanakan. Middleware boleh ditambah dalam kumpulan penghalaan atau pada mana-mana peringkat penghalaan. Dalam contoh ini, perisian tengah pengelogan digunakan untuk log permintaan dan respons HTTP. Perisian tengah pengesahan digunakan untuk menyemak sama ada pengguna telah log masuk.
Apabila memproses permintaan, kadangkala anda perlu melakukan beberapa pemprosesan tak segerak sebelum respons dikembalikan, seperti menghantar pemberitahuan kepada perkhidmatan lain atau mengemas kini pangkalan data . Rangka kerja Gin menyediakan kaedah untuk mengendalikan permintaan secara tak segerak, yang bermaksud ia boleh melakukan pemprosesan tak segerak sebelum respons HTTP dikembalikan.
package main import ( "fmt" "time" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/long_async", func(c *gin.Context) { // 使用goroutine在异步处理中执行代码 cCp := c.Copy() go func() { time.Sleep(5 * time.Second) // 注意使用只读上下文 fmt.Println("handler finished") c.JSON(200, gin.H{ "message": "Hello, async!", }) }() }) router.GET("/long_sync", func(c *gin.Context) { // 在同步处理中执行代码 time.Sleep(5 * time.Second) fmt.Println("sync handler finished") c.JSON(200, gin.H{ "message": "Hello, sync!", }) }) router.Run() }
Dalam contoh di atas, dua laluan dibuat: satu menggunakan pemprosesan tak segerak dan satu lagi menggunakan pemprosesan segerak. Menggunakan API /copy, anda boleh menyediakan goroutine yang akan bertindak balas kepada permintaan selepas 5 saat. Dalam API /long_sync, fungsi pemprosesan permintaan dilaksanakan secara serentak dan permintaan itu dijawab selepas 5 saat. Seperti yang anda lihat, dalam /long_async, utas utama tidak akan disekat.
3. Kesimpulan
Artikel ini memperkenalkan pengetahuan asas menggunakan rangka kerja Gin untuk melaksanakan reka bentuk API RESTful. Kami merangkumi asas rangka kerja Gin seperti penghalaan, pengikatan parameter, kumpulan laluan, perisian tengah dan pemprosesan tak segerak.
Prestasi dan kebolehskalaan yang baik bagi rangka kerja Gin menjadikannya rangka kerja pilihan untuk reka bentuk API RESTful. Kami berharap artikel ini dapat membantu pembaca memahami asas rangka kerja Gin dan konsep asas reka bentuk API RESTful untuk menyepadukannya ke dalam aplikasi web.
Atas ialah kandungan terperinci Laksanakan reka bentuk API RESTful menggunakan rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!