猿问

构建具有重载端点的原型 3 gRPC API

我对API构建相当陌生,所以这可能是一个比我最初提出的更广泛的问题。我正在戈朗中创建一个API(使用原型buf 3和gRPC),它有两个类似的端点:

  • 获取 /项目/流派

  • 获取 /项目/{id}

问题是,当我运行 时,模式匹配会导致端点被调用作为id。有没有一些简单的方法可以解决这个问题,或者我必须在服务器代码中构建一些东西来根据类型调用正确的函数?curl localhost:8080/project/genres/project/{id}genres

我还尝试翻转这些定义的顺序,以防万一模式匹配有一些我不知道的操作顺序,但这并没有区别。

以下是我的原型文件中的定义:

message EmptyRequest { }

message ProjectRequest {

  string id = 1;

}


message GenreResponse {

  int32 id = 1;

  string name = 2;

}


message ProjectResponse {

  int32 id = 1;

  string name = 2;

}


service ProjectService {

  rpc GetProject(ProjectRequest) returns (ProjectResponse) {

    option (google.api.http) = {

      get: "/v1/project/{id}"

    };

  }

  rpc GetGenres(EmptyRequest) returns (GenreResponse) {

    option (google.api.http) = {

      get: "/v1/project/genres"

    };

  }

}


繁星点点滴滴
浏览 97回答 1
1回答

小唯快跑啊

我能够在URL路径模板中指定检查以解决此问题: rpc GetGenres(EmptyRequest) returns (GenreResponse) {    option (google.api.http) = {    get: "/v1/project/{id=genres}"  };}这似乎已经解决了这个问题。我不知道是否有其他解决方案,或者这是否是正确的方法,但是如果有更好的答案,我很乐意接受其他答案。
随时随地看视频慕课网APP

相关分类

Go
我要回答