Ginrest的简单实用
ginrest是我写的一个关于gin框架的辅助插件,它可以帮助你在开发中省去一些冗余的步骤
安装
go get github.com/Ivy1996-encode/ginrest
原生gin中使用
package main
import (
"github.com/Ivy1996-encode/ginrest"
"github.com/gin-gonic/gin"
"net/http"
)
type User struct{}
func (*User) Get(c *gin.Context) {
c.JSON(http.StatusOK, "user list")
}
func (*User) Post(c *gin.Context) {
c.JSON(http.StatusOK, "user list")
}
func main() {
server := gin.Default()
server.Any("/user", ginrest.AsMethodHandlerFunc(new(User)))
server.Run()
}
使用gin
原生的路由注册方式,使用ginrest.AsMethodHandlerFunc
将我们的结构体注册进去,它回去根据请求方法的名称去匹配对应的handler
,这样就可以不用写多个路由去匹配不同的请求方式了。
但是这种写法会生成多余的路由。
使用router
package main
import (
"github.com/Ivy1996-encode/ginrest"
"github.com/gin-gonic/gin"
"net/http"
)
type User struct{}
func (*User) Get(c *gin.Context) {
c.JSON(http.StatusOK, "user list")
}
func (*User) Post(c *gin.Context) {
c.JSON(http.StatusOK, "user list")
}
func main() {
server := ginrest.Default()
router := ginrest.Router(server, ginrest.MethodsActions)
router.Register("/user", new(User))
server.Run()
}
使用ginrest
提供的路由来为我们注册对于的handler
,路由接受两个参数,第一个是我们的默认的*gin.Engine
指针对象,第二个是一个匹配规则。这里默认的是根据请求方法的名字来匹配规则,使用这种注册不会产生多余的路由。你可以重写注册的struct
的GetActions
方法来覆盖默认的匹配规则。
使用RestRouter
package main
import (
"github.com/Ivy1996-encode/ginrest"
"github.com/gin-gonic/gin"
"net/http"
)
type User struct{}
func (*User) List(context *gin.Context) {
context.JSON(http.StatusOK, "user list")
}
func (*User) Retrieve(context *gin.Context) {
context.JSON(http.StatusOK, "user detail")
}
func main() {
server := ginrest.Default()
router := ginrest.RestRouter(server)
router.Register("/user", new(User))
server.Run()
}
RestRouter
是Router
的进阶版本, 它可以自动的根据事先定义好的方法去注册对应的路由,并且支持对象级路由,如上的例子对象的路由为
[GIN-debug] GET /user --> reflect.methodValueCall (4 handlers)
[GIN-debug] POST /user --> reflect.methodValueCall (4 handlers)
如果你使用过djangorestframework,你会很轻松的理解这个路由匹配方式