Порядок приоритетов конечных точек 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;
}
Другие вопросы по тегам