Порядок приоритетов конечных точек grpc-шлюза
У меня есть сервис, определенный таким образом:
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
метод, и он пытается получить категорию с идентификатором search
,
Я полагаю, это потому, что пути очень близки. Есть ли способ определения приоритета в маршрутах, как в классическом веб-приложении?
Спасибо
2 ответа
Прошло некоторое время с момента этого вопроса, но недавно я сам столкнулся с той же проблемой и нашел решение.
Таким образом, чем ниже вы помещаете конечную точку в определение службы 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
должно сработать.
Не использовать {id.val}
использовать {id}
, И будет работать
message GetCategory {
string id = 1;
}