什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由、正则路由、自动路由,接下来详细的讲解如何使用这三种路由。
从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 routers/router.go
文件中。最简单的 beego 路由由 URI 和闭包函数组成。
web.Get("/",func(ctx *context.Context){
ctx.Output.Body([]byte("hello world"))
})
web.Post("/alice",func(ctx *context.Context){
ctx.Output.Body([]byte("bob"))
})
web.Any("/foo",func(ctx *context.Context){
ctx.Output.Body([]byte("bar"))
})
有些时候我们已经实现了一些 rpc 的应用,但是想要集成到 beego 中,或者其他的 httpserver 应用,集成到 beego 中来.现在可以很方便的集成:
s := rpc.NewServer()
s.RegisterCodec(json.NewCodec(), "application/json")
s.RegisterService(new(HelloService), "")
web.Handler("/rpc", s)
web.Handler(router, http.Handler)
这个函数是关键,第一个参数表示路由 URI, 第二个就是你自己实现的 http.Handler
, 注册之后就会把所有 rpc 作为前缀的请求分发到 http.Handler
中进行处理.
这个函数其实还有第三个参数就是是否是前缀匹配,默认是 false, 如果设置了 true, 那么就会在路由匹配的时候前缀匹配,即 /rpc/user
这样的也会匹配去运行
后面会讲到固定路由,正则路由,这些参数一样适用于上面的这些函数
在介绍这三种 beego 的路由实现之前先介绍 RESTful,我们知道 RESTful 是一种目前 API 开发中广泛采用的形式,beego 默认就是支持这样的请求方法,也就是用户 Get 请求就执行 Get 方法,Post 请求就执行 Post 方法。因此默认的路由是这样 RESTful 的请求方式。
固定路由也就是全匹配的路由,如下所示:
web.Router("/", &controllers.MainController{
})
web.Router("/admin", &admin.UserController{
})
web.Router("/admin/index", &admin.ArticleController{
})
web.Router("/admin/addpkg", &admin.AddController{
})
如上所示的路由就是我们最常用的路由方式,一个固定的路由,一个控制器,然后根据用户请求方法不同请求控制器中对应的方法,典型的 RESTful 方式。
为了用户更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由:
web.Router(“/api/?:id”, &controllers.RController{})
默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,URL”/api/“可正常匹配
web.Router(“/api/:id”, &controllers.RController{})
默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,但URL”/api/“匹配失败
web.Router(“/api/:id([0-9]+)“, &controllers.RController{})
自定义正则匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”
web.Router(“/user/:username([\\w]+)“, &controllers.RController{})
正则字符串匹配 //例如对于URL”/user/astaxie”可以匹配成功,此时变量”:username”值为”astaxie”
web.Router(“/download/*.*”, &controllers.RController{})