在使用 Gin 框架构建 RESTful API 时,路由分组与版本控制是一种常见的实践,可以帮助你更好地管理不同版本的 API。下面是如何在 Gin 中实现路由分组和版本控制的示例。
目录结构
/hello-gin
│
├── cmd/
│ └── main.go
├── api/
│ ├── v1/
│ │ └── routes.go
│ └── v2/
│ └── routes.go
└── ...
1. cmd/main.go
在主程序中设置基础路由和分组。
go
package main
import (
"hello-gin/api/v1"
"hello-gin/api/v2"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 设置路由分组
v1Group := r.Group("/api/v1")
{
v1.RegisterRoutes(v1Group)
}
v2Group := r.Group("/api/v2")
{
v2.RegisterRoutes(v2Group)
}
// 启动服务器
r.Run(":8080")
}
2. api/v1/routes.go
定义第一个版本的路由。
go
package v1
import (
"github.com/gin-gonic/gin"
"net/http"
)
func RegisterRoutes(r *gin.RouterGroup) {
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello from API v1!"})
})
}
3. api/v2/routes.go
定义第二个版本的路由,可能包括新的功能或改进。
go
package v2
import (
"github.com/gin-gonic/gin"
"net/http"
)
func RegisterRoutes(r *gin.RouterGroup) {
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello from API v2!"})
})
// 添加新功能
r.GET("/goodbye", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Goodbye from API v2!"})
})
}
4. 运行应用
在项目根目录下运行:
bash
go run cmd/main.go
访问以下 URL 测试不同版本的 API:
http://localhost:8080/api/v1/hello
:应该返回{"message": "Hello from API v1!"}
http://localhost:8080/api/v2/hello
:应该返回{"message": "Hello from API v2!"}
http://localhost:8080/api/v2/goodbye
:应该返回{"message": "Goodbye from API v2!"}
总结
通过路由分组与版本控制,你可以轻松地在 Gin 应用中管理不同版本的 API。这样可以避免对现有接口的破坏,同时为新功能提供灵活性。使用这种结构,代码的可读性和可维护性也大大提高。