我在rust中有一个使用poem::openapi的HTTP端点。我想要一个变量段路径的单一处理程序。
#[OpenApi]
impl NvApi {
#[oai(path = "/:namespace/:id", method = "get")]
async fn get(
&self,
nv: Data<&SharedHandle>,
namespace: Path<String>,
id: Path<String>,
) -> Result<GetResponse, poem::Error> {
log::debug!("get {}/{}", namespace.as_str(), id.as_str());
...
...
...
}
我希望上面的代码能够处理像/mynamespace/mydomain/myid
和/mynamespace/myid
这样的路径--将任意数量的段加载到命名空间变量中,但总是将尾部段加载到'id'变量中。
我在诗歌库中看到了对“*path”的引用,但找不到任何文档或通配符的示例。我想使用上面的模式,因为我的SharedHandle impl是必需的。
1条答案
按热度按时间guicsvcw1#
这是不可能的。
poem
中的路径解析器在遇到通配符标记后会中断,这意味着它不能用于在路径中间进行匹配。最好的解决方法是使用匹配除最后一段以外的所有路径段的正则表达式。在代码中,假设它会显示为:
但是
poem
使用regex
crate,而does not support lookaheads(需要忽略最后一个斜杠)。相反,你将不得不使用一个没有lookaheads的正则表达式,并手动删除尾部的斜杠: