add bm path param doc (#253)

pull/259/head
Felix Hao 5 years ago committed by GitHub
parent db4edd293b
commit 2ef7f7e10c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 49
      doc/wiki-cn/blademaster-quickstart.md
  2. 2
      pkg/net/http/blademaster/ratelimit.go
  3. 6
      pkg/net/http/blademaster/tree.go

@ -51,7 +51,8 @@ func initRouter(e *bm.Engine) {
e.Ping(ping) // engine自带的"/ping"接口,用于负载均衡检测服务健康状态 e.Ping(ping) // engine自带的"/ping"接口,用于负载均衡检测服务健康状态
g := e.Group("/kratos-demo") // e.Group 创建一组 "/kratos-demo" 起始的路由组 g := e.Group("/kratos-demo") // e.Group 创建一组 "/kratos-demo" 起始的路由组
{ {
g.GET("/start", howToStart) // g.GET 创建一个 "kratos-demo/start" 的路由,默认处理Handler为howToStart方法 g.GET("/start", howToStart) // g.GET 创建一个 "kratos-demo/start" 的路由,使用GET方式请求,默认处理Handler为howToStart方法
g.POST("start", howToStart) // g.POST 创建一个 "kratos-demo/start" 的路由,使用POST方式请求,默认处理Handler为howToStart方法
} }
} }
``` ```
@ -111,6 +112,52 @@ curl 'http://127.0.0.1:8000/metadata'
} }
``` ```
# 路径参数
使用方式如下:
```go
func initRouter(e *bm.Engine) {
e.Ping(ping)
g := e.Group("/kratos-demo")
{
g.GET("/start", howToStart)
// 路径参数有两个特殊符号":"和"*"
// ":" 跟在"/"后面为参数的key,匹配两个/中间的值 或 一个/到结尾(其中不再包含/)的值
// "*" 跟在"/"后面为参数的key,匹配从 /*开始到结尾的所有值,所有*必须写在最后且无法多个
// NOTE:这是不被允许的,会和 /start 冲突
// g.GET("/:xxx")
// NOTE: 可以拿到一个key为name的参数。注意只能匹配到/param1/felix,无法匹配/param1/felix/hao(该路径会404)
g.GET("/param1/:name", pathParam)
// NOTE: 可以拿到多个key参数。注意只能匹配到/param2/felix/hao/love,无法匹配/param2/felix或/param2/felix/hao
g.GET("/param2/:name/:value/:felid", pathParam)
// NOTE: 可以拿到一个key为name的参数 和 一个key为action的路径。
// NOTE: 如/params3/felix/hello,action的值为"/hello"
// NOTE: 如/params3/felix/hello/hi,action的值为"/hello/hi"
// NOTE: 如/params3/felix/hello/hi/,action的值为"/hello/hi/"
g.GET("/param3/:name/*action", pathParam)
}
}
func pathParam(c *bm.Context) {
name, _ := c.Params.Get("name")
value, _ := c.Params.Get("value")
felid, _ := c.Params.Get("felid")
action, _ := c.Params.Get("action")
path := c.RoutePath // NOTE: 获取注册的路由原始地址,如: /kratos-demo/param1/:name
c.JSONMap(map[string]interface{}{
"name": name,
"value": value,
"felid": felid,
"action": action,
"path": path,
}, nil)
}
```
# 性能分析 # 性能分析
启动时默认监听了`2333`端口用于`pprof`信息采集,如: 启动时默认监听了`2333`端口用于`pprof`信息采集,如:

@ -16,7 +16,7 @@ type RateLimiter struct {
logTime int64 logTime int64
} }
// New return a ratelimit middleware. // NewRateLimiter return a ratelimit middleware.
func NewRateLimiter(conf *bbr.Config) (s *RateLimiter) { func NewRateLimiter(conf *bbr.Config) (s *RateLimiter) {
return &RateLimiter{ return &RateLimiter{
group: bbr.NewGroup(conf), group: bbr.NewGroup(conf),

@ -5,9 +5,9 @@
package blademaster package blademaster
import ( import (
"net/url" "net/url"
"strings" "strings"
"unicode" "unicode"
) )
// Param is a single URL parameter, consisting of a key and a value. // Param is a single URL parameter, consisting of a key and a value.

Loading…
Cancel
Save