特殊路由匹配机制
什么是特殊路由匹配机制?
通常来说 匹配机制 有:
- 全等匹配:-
- 头部匹配:-
- 尾部匹配:-
- 局部匹配:判断是否满足局部匹配
- 正则匹配:判断是否满足正则匹配
在路由管理中,包含多种匹配模式的机制我们都称之为特殊路由匹配机制。
特殊路由匹配机制 是现代 web 框架必不可少的特点。
对于大多数的框架而言,它们都支持正则匹配,虽然这会带来更丰富的能力,但这无疑也会引入一定的性能问题。
Pywss 通过更简单、轻量的方式实现了三种路由匹配机制,包括:
匹配机制 | 说明 |
---|---|
全等匹配 | app.get("/full/match", handler) |
局部匹配 | app.get("/party/match/{name}", handler) ,详情见 局部匹配 |
头部匹配 | app.get("/head/match/*", handler) ,详情见 头部匹配 |
注意: 上述匹配机制无法同时生效,且存在优先级,即 全等匹配 > 局部匹配 > 头部匹配。
全等匹配此处不在赘述。下面主要介绍:
- 局部匹配
- 头部匹配
局部匹配
Pywss 在配置路由时,通过 大括号 区分 局部匹配。
在使用 局部匹配 时,会生成指定的 "路由参数",此参数存储在 ctx.route_params
中。
获取路由参数
import pywss
def hello(ctx: pywss.Context):
name = ctx.route_params["name"]
ctx.write({"hello": name})
app = pywss.App()
app.any("/hello/{name}", hello)
app.run()
局部匹配 不支持类型校验,即默认是字符串类型。
理论上来讲,通过类型校验可以实现更加丰富的路由机制,比如:
路由类型校验
"/api/v1/user/name/{name: any}"
"/api/v1/user/age/{age: int}"
这种看似很秀,实则意义不大。
因为在这种模式下,"/api/v1/user/age/unknown"
将不会命中任何路由,但实际只是用户使用方式不对而已,这会造成困惑。
Pywss 更希望用户能够收到类似 {"errMsg": "'unknown' is invalid of age"}
的错误信息。
头部匹配
Pywss 在配置路由时,通过尾部配置 * 可以区分 头部匹配。
头部匹配
import pywss
def hello(ctx: pywss.Context):
name = ctx.route.replace("/hello/", "", 1)
ctx.write({"hello": name})
app = pywss.App()
app.any("/hello/*", hello)
app.run()
在此模式下,任意以 /route/
开头的路由均可以命中此路由。