Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ffhelicopter/tmm
使用Gin快速搭建WEB站点以及提供RESTful接口
https://github.com/ffhelicopter/tmm
gin-gonic restful tmm website
Last synced: 3 months ago
JSON representation
使用Gin快速搭建WEB站点以及提供RESTful接口
- Host: GitHub
- URL: https://github.com/ffhelicopter/tmm
- Owner: ffhelicopter
- Created: 2018-05-21T04:50:13.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-25T02:59:14.000Z (almost 2 years ago)
- Last Synced: 2024-10-01T01:01:29.957Z (4 months ago)
- Topics: gin-gonic, restful, tmm, website
- Language: Go
- Homepage:
- Size: 2.03 MB
- Stars: 85
- Watchers: 1
- Forks: 27
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# tmm
快速搭建WEB站点以及提供RESTful接口 。## 一:静态资源站点
``` go
router := gin.Default()// 静态资源加载,本例为css,js以及资源图片
router.StaticFS("/public", http.Dir("D:/goproject/src/github.com/ffhelicopter/tmm/website/static"))
router.StaticFile("/favicon.ico", "./resources/favicon.ico")
```## 二:动态站点
模板可调用静态资源站点的css,图片等
``` go
// 导入所有模板,多级目录结构需要这样写
router.LoadHTMLGlob("website/tpl/*/*")
// website分组
v := router.Group("/")
{v.GET("/index.html", handler.IndexHandler)
v.GET("/add.html", handler.AddHandler)
v.POST("/postme.html", handler.PostmeHandler)
}
```## 三:中间件的使用,在API中可能使用限流,身份验证等
``` go
// 中间件 Go语言的net/http包特别容易构建中间件。
// Gin提供了类似的中间件。需要注意的是中间件只对注册过的路由起作用。
// 可以限定中间件的作用范围。大致分为全局中间件,单个处理程序中间件和组中间件。// 使用全局CORS中间件。
// router.Use(Cors())
// 即使是全局中间件,在use前的代码不受影响
// 也可在handler中局部使用,见api.GetUser// 身份认证中间件,对于API,我们可以考虑JSON web tokens
//rate-limit 限流中间件
lmt := tollbooth.NewLimiter(1, nil)
//lmt := tollbooth.NewLimiter(1, &limiter.ExpirableOptions{DefaultExpirationTTL: time.Hour})
//lmt.SetHeader("X-Access-Token", []string{"abc123", "xyz098"})
//lmt.SetBasicAuthUsers([]string{"sansa"})
lmt.SetMessage("服务繁忙,请稍后再试...")
//tollbooth.LimitByKeys(lmt, []string{"127.0.0.1", "/"})
```## 四:RESTful API接口
``` go
// 组路由以及版本控制
v1 := router.Group("/v1")
{
// 下面是组中间件的用法
// v1.Use(Cors())// 单个中间件的用法
// v1.GET("/user/:id/*action",Cors(), api.GetUser)// rate-limit
v1.GET("/user/:id/*action", LimitHandler(lmt), api.GetUser)//v1.GET("/user/:id/*action", Cors(), api.GetUser)
// AJAX OPTIONS ,下面是有关OPTIONS用法的示例
// v1.OPTIONS("/users", OptionsUser) // POST
// v1.OPTIONS("/users/:id", OptionsUser) // PUT, DELETE
/*
// 对应的handler中增加处理
func OptionsUser(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Methods", "DELETE,POST,PUT")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type")
c.Next()
...
}*/
}
```