
go-restful是一个golang语言实现的RESTful库,Kubernetes APIServer使用它实现RESTful API。下面我们一起简单看一下Kubesphere如何使用go-restful的。
Container
Container逻辑上是WebService的集合,功能上可以实现多终端的效果。 它包括一组restful.WebService和一个http.ServeMux对象,使用RouteSelector进行请求派发。
Webservice
WebService逻辑上是Route的集合,功能上主要是为一组Route统一设置包括root path,请求响应的数据类型等一些通用的属性。
Route
路由包含两种,一种是标准JSR311接口规范的实现RouterJSR311,一种是快速路由CurlyRouter。 CurlyRouter支持正则表达式和动态参数,相比RouterJSR11更加轻量级,apiserver中使用的就是这种路由。 一种Route的设定包含:请求方法(http Method),请求路径(URL Path),输入输出类型(JSON/YAML)以及对应的回掉函数restful.RouteFunction,响应内容类型(Accept)等。
代码示例:一个API聚合服务,包含两种服务,一种是/api, /apis两个路径请求代理给Kubernetes,另一种是本地注册API提供服务。
定义APIServer结构体
APIServer构造函数
初始化kubernets Client和http server
初始化Container
服务创建与注册
创建一个webservice,path为/aiapis/{GroupVersion}的服务,这里GroupVersion为空。添加了一条"/version"路由。最后API请求URL为/aiapis/version。
Handler Chain
通过WithRequestInfo解析API请求的信息,WithKubeAPIServer根据API请求信息判断是否代理请求给Kubernetes
WithRequestInfo,调用NewRequestInfo解析请求信息保存到ctx中
NewRequestInfo根据URL路径,解析请求信息,这里根据APIPrefix是否为IsKubernetesRequest请求
WithKubeAPIServer handler首先创建Kubernetes代理defaultTransport,再RequestInfoFrom从请求的context中获取信息,如果info.IsKubernetesRequest是Kubernetes请求,httpProxy代理请求到Kubernetes。
运行APIServer
0 likes · 5 views · Jun 25, 2025
Implemented RESTful API using go-restful for Kubesphere.