4

我有这样定义的服务:

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 应用程序中那样定义路由的优先级?

谢谢

4

2 回答 2

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应该工作。

于 2021-08-09T10:07:12.853 回答
-1

不使用{id.val},使用{id}。并且会工作

message GetCategory {
    string id = 1;
}
于 2018-08-29T14:18:53.810 回答