go-restful ——kubernetes使用的restful框架

阅读kubernetes apiserver源码时,发现使用了go-restful,简单学习了下。主要内容来自:https://godoc.org/github.com/emicklei/go-restful

 

go-restful是go语言写的一个restful框架,里边几个概念之间的关系大概如下:

Container包含WebService,WebService包含Route,Route会把不同的路径和处理函数进行绑定。

不指定Container的情况下,会使用框架默认的container。

执行如下命令安装该框架

go get -d github.com/emicklei/go-restful

简单的示例代码,采用默认的container

package main
  
import "github.com/emicklei/go-restful"
import "net/http"
import "io"

func main() {
        ws := new(restful.WebService)
        ws.Path("/users").Consumes(restful.MIME_JSON, restful.MIME_XML).Produces(restful.MIME_JSON, restful.MIME_XML)
        ws.Route(ws.GET("/{user-id}").To(findUser))

        restful.Add(ws)

        http.ListenAndServe(":8090", nil)
}

func findUser(request *restful.Request, response *restful.Response) {
        io.WriteString(response, "test")
}

一个自定义Container的例子

package main
 
import "github.com/emicklei/go-restful"
import "net/http"
import "io"

func main() {
    //构造一个新的container
	container := restful.NewContainer()

        ws := new(restful.WebService)
        ws.Path("/users").Consumes(restful.MIME_JSON, restful.MIME_XML).Produces(restful.MIME_JSON, restful.MIME_XML)
        ws.Route(ws.GET("/{user-id}").To(findUser))

	container.Add(ws)

	server := &http.Server{Addr : ":9010", Handler : container}


        server.ListenAndServe()
}

func findUser(request *restful.Request, response *restful.Response) {
        io.WriteString(response, "test")
}

另外,container和WebService还可以添加各种Filter,用以对request和response进行处理,有点类似django中的filter

package main
 
import "github.com/emicklei/go-restful"
import "net/http"
import "io"
import "log"

func main() {
	container := restful.NewContainer()

        ws := new(restful.WebService)
        ws.Path("/users").Consumes(restful.MIME_JSON, restful.MIME_XML).Produces(restful.MIME_JSON, restful.MIME_XML)
        ws.Route(ws.GET("/{user-id}").To(findUser))

	container.Add(ws)
	container.Filter(testFilter)

	server := &http.Server{Addr : ":9010", Handler : container}


        server.ListenAndServe()
}

func findUser(request *restful.Request, response *restful.Response) {
        io.WriteString(response, "test")
}

func testFilter(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
    log.Printf("[global-filter (logger)] %s,%s\n", req.Request.Method, req.Request.URL)
    chain.ProcessFilter(req, resp)
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值