IRIS路由注册(接路由底层分析)
IRIS路由注册
实例化完Application
对象,接着就是路由注册了。也就是类似下面的代码
看看api.Get 实现
我们主要看app.Get("/home", HomeHandler)
这个函数的实现。进入该Get
函数的源码,发现调用者是APIBuilder
结构体,如下:
这是因为在Application
结构体中嵌套了router.APIBuilder
结构体,所以Application
自然也就嵌套了APIBuilder
结构体的所有方法。
在Get
的这个方法中,我们看第二个参数handlers
的类型是context.Handler
,其定义如下是 type Handler func(*Context)
,这就是为什么我们把HomeHandler
定义这种类型的原因。本质上也可以说没有为什么,就是iris框架这么规定的。我们再接着源代码往下看,会看到如下代码,根据请求的方法、路径以及请求处理函数创建一个路由对象,然后将该路由对象加入到APIBuilder
的路由表routes
中。
路由分组
对路由进行分组也是在路由注册时常用的路由注册方法。在iris中使用以下代码对路由进行分组:
这里通过使用app.Party
方法对路由进行了分组。Party的方法如下
实际上也是APIBuilder的一个方法。app
中的APIBuilder
创建了一个子APIBuilder
对象,同时给子APIBuilder
中的relativePath
设置成了 "/admin"
。也就是通过该子APIBuilder
对象注册的路由,路径都是相对于relativePath
的,即 "/admin"
设置的,具体的关系图如下