部署 Google Cloud Endpoints 配置失败 Google API Linter 建议

Deploying Google Cloud Endpoints configuration fails Google API Linter recommendations

更新: Cloud Endpoints Portal is being deprecated 2023 年 3 月 21 日后将不再可用。


在关注 Deploying the Endpoints configuration 之后,我已经成功部署了我编译的 .proto 文件和 gRPC API 配置文件。

太棒了。我决定做一个好公民,在我的 .proto.

上使用 Google's API Linter

这导致了一些包含各种注释的建议。注释需要新的 proto 导入;

之前

syntax = "proto3";
package api.v1;

// Request message for Get method.
message GetFooRequest {
  // The field will contain name of the resource requested.
  string name = 1;
}

...blah,blah

之后

syntax = "proto3";
package api.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";

// Request message for Get method.
message GetFooRequest {
  // The field will contain name of the resource requested.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference).type = "api.v1.HelloWorld/Foo"
  ];
}
...blah,blah

注释需要导入四个新的原型文件:

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";

全部都是 Google's Common API protos, therefore I cloned the repo 的一部分到 /Users/Jack/api-common-protos/ 中:

git clone https://github.com/googleapis/api-common-protos.git

...并在编译我的 .proto 文件时包含它:

python3 -m grpc_tools.protoc --proto_path=api
                             --proto_path=/Users/Jack/api-common-protos/google
                             api/v1/foo.proto

没有错误。伟大的。最后我部署了 API:

gcloud endpoints services deploy api_descriptor.pb api-config.yaml

至此完成。但是,开发人员门户现在显示:

We encountered the following errors while processing this API specification:

API parse error: Error: ENOENT: no such file or directory, open '/tmp/google/api/client.proto'

Please correct these errors and try again.

阴茎:

如果我删除注释(和所需的导入),我的 API 的端点开发人员门户可以正常工作。

这是开发者门户中的错误。我已将其报告给负责的团队。请参阅我发布到 google-cloud-endpoints@googlegroups.comGoogle's API Linter suggestions with Google Cloud Endpoints?

临时解决这个问题可能不需要太多努力:

cp /Users/Jack/api-common-protos/google/api/client.proto /tmp/google/api/client.proto

然后文件将在预期的位置可用 - 尽管没有自动放置在那里。