Rego 轻量级Web框架
此框架是用golang编写的一个轻量级Web框架,大多数Web框架功能已经实现其中包括WebSocket功能也有相应的实现, 框架借鉴了gin框架的设计架构,且框架的使用方法与gin相比类似,具有RestFul的通信风格,使用起来比较简单,其内 部保存和获取路由采用的HashMap来实现的其效率在处理动态参数时可能没有使用树的效果好
使用
其开启一个Http服务,只需要几行代码便可以实现
r:=rego.New()
r.GET("/echo", func(context *rego.Context) {
context.String(200,"hello world")
})
r.Run(":8080")
路由
-
基本路由
r:=rego.New() r.GET("/someGet", getting) r.POST("/somePost", posting) r.PUT("/somePut", putting) r.DELETE("/someDelete", deleting) r.PATCH("/somePatch", patching) r.HEAD("/someHead", head) r.OPTIONS("/someOptions", options) r.Run(":8080")
-
路由参数
- api参数可通过Context的Param方法获取
router.GET("/string/:id", func(c *rego.Context) { name := c.Param("id") fmt.Println(name) })
- Url参数可通过Query方法获取,也可以通过DefaultQuery方法设置默认参数
router.GET("/getParam", func(c *gin.Context) { name := c.DefaultQuery("name", "Guest") lastname := c.Query("lastname") fmt.Println("My name is", name,lastname) })
- 表单参数通过PostForm方法获取,也可通过DefaultForm方法设置默认参数
router.POST("/getForm", func(c *gin.Context) { type := c.DefaultPostForm("name", "type")//可设置默认值 msg := c.PostForm("msg") title := c.PostForm("title") fmt.Println("type is %s, msg is %s, title is %s", type, msg, title) })
-
路由群组
rr:=r.Group("/y") { rr.GET("/a", func(context *rego.Context) { context.String(200,"ni hao") }) rr.GET("/id", func(context *rego.Context) { context.String(200,"ni h") }) }
请求
-
请求头
-
请求参数
c.Set("test","1234") c.Get("test") //当然利用断言可以获取其他类型 c.GetString("test") ...
-
上传文件
-
Cookies
r:=rego.New()
r.POST("/upload", func(context *rego.Context) {
file,header,err:=context.Request.FormFile("upload")
fileName:=header.Filename
out, err := os.Create("./"+fileName+".png")
defer out.Close()
if err != nil {
log.Fatalf("%s : create the file failed",err)
}
_, err = io.Copy(out, file)
if err != nil {
log.Fatalf("%s : copy the file failed",err)
}
})
r.Run(":8080")
响应
-
字符串响应
c.String(200,"hello!")
-
JSON/XML响应
var msg struct { Name string `json:"name"` Message string Number int } msg.Name = "Lena" msg.Message = "hey" msg.Number = 123 r:=rego.New() r.GET("/moreJSON", func(c *rego.Context) { c.JSON(http.StatusOK, gin.H{"user": "Lena", "Message": "hey", "Number": 123}) c.XML(http.StatusOK, gin.H{"user": "Lena", "Message": "hey", "Number": 123}) c.JSON(http.StatusOK, msg) }) r.Run(":8080")
-
重定向
r:=rego.New() r.GET("/Redirect", func(c *rego.Context) { c.Redirect(http.StatusMovedPermanently, "http://129.28.185.138/") }) r.Run(":8080")
-
附加Cookie
中间件
-
自定义中间件
func middle()rego.HandlerFunc{ return func(context *rego.Context) { context.Set("test","test") } } func main(){ r:=rego.New() r.Use(middle()) r.GET("/TEST", func(context *rego.Context) { if value,ok:=context.Get("test");ok{ fmt.Println(value) } }) r.GET("/te", func(context *rego.Context) { fmt.Println("test") }) r.Run(":8080") }
-
WebSocket
r:=rego.New() r.WebSocket("/test",rego.WSConfig{ OnOpen: func(con *rego.WSCon) { fmt.Println("open the connection") }, OnClose: func(con *rego.WSCon) { fmt.Println("close the connection") }, OnMessage: func(con *rego.WSCon, data []byte) { fmt.Println(con.Conn.RemoteAddr(),"receive the message:",string(data)) con.SendIframe([]byte("ni hao ya ")) }, OnError: func(con *rego.WSCon) { con.Conn.Close() }, }) r.Run(":8080")
TODO
- json解析器
- 数据解析绑定
- 返回参数格式增加
- Session
- Radix树
- BasicAuth中间件,设置授权用户