我有这样定义的服务:
service Service {
rpc SearchCategory(SearchCategoryRequest) returns (SearchCategoryResponse) {
option (google.api.http) = {
get: "/v1/categories/search"
};
}
rpc GetCategory(GetCategoryRequest) returns (GetCategoryResponse) {
option (google.api.http) = {
get: "/v1/categories/{id.val}"
};
}
}
问题在于,即使我调用search?q=MyQuery
,它也会被GetCategory
方法捕获,并尝试获取ID为search
的类别。
我想是因为路径很近。有没有一种方法可以像在经典Web应用程序中那样在路由中定义优先级?
谢谢
答案 0 :(得分:0)
这个问题已经有一段时间了,但我最近自己遇到了完全相同的问题并找到了解决方案。
因此,基本上,您将端点放在 protobuf 服务定义中的较低,它的优先级较高。
对于您的情况,您需要交换两个端点,以便 SearchCategory
位于 GetGategory
之下,从而赋予它更高的优先级。
service Service {
rpc GetCategory(GetCategoryRequest) returns (GetCategoryResponse) {
option (google.api.http) = {
get: "/v1/categories/{id.val}"
};
}
rpc SearchCategory(SearchCategoryRequest) returns (SearchCategoryResponse) {
option (google.api.http) = {
get: "/v1/categories/search"
};
}
}
那么 /v1/categories/search
应该可以工作。
答案 1 :(得分:-1)
不使用{id.val}
,请使用{id}
。并且会工作
message GetCategory {
string id = 1;
}