当前位置: 首页 > 知识库问答 >
问题:

gRPC Bazel特使Json代理-如何导入google/api/annotations.proto

牛嘉谊
2023-03-14

我有一个非常简单的gRPC服务定义为:

syntax = "proto3";
package helloworld;
import "annotations.proto";

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello(HelloRequest) returns (HelloReply) {
    option (google.api.http) = {
      post: "/api/v1/hello"
      body: "*"
    }
  }
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

有趣的是我用的是特使gRPC

此外,我正在使用Bazel构建基于Java的gRPC Services。Envoier转码过滤器需要一些注释:

option (google.api.http) = {
  post: "/api/v1/hello"
  body: "*"
}

我正在使用proto_library(https://github.com/cgrushko/proto_library)从. proto定义生成相应的. java文件,但我无法添加

import "google/api/annotations.proto";

去医院。原型文件,因为我不知道如何导入https://github.com/googleapis/googleapis/blob/master/google/api/annotations.proto一个巴泽尔项目。

非常感谢。

向你问好,jj

共有2个答案

陆飞捷
2023-03-14

我遵循了第二个建议(可维护的方式:外部存储库),最终得到了:

工作空间:

http_archive(
name = "com_google_protobuf",
sha256 = "cef7f1b5a7c5fba672bec2a319246e8feba471f04dcebfe362d55930ee7c1c30",
strip_prefix = "protobuf-3.5.0",
urls = ["https://github.com/google/protobuf/archive/v3.5.0.zip"],
)

new_http_archive(
name = "googleapi",
url = "https://github.com/googleapis/googleapis/archive/common-protos 1_3_1.zip", 
strip_prefix = "googleapis-common-protos-1_3_1/",
build_file="BUILD.googleapi"
)

建筑古格里皮

package(default_visibility=['//visibility:public'])

proto_library(
name = 'annotations_proto',
srcs = ['google/api/annotations.proto'],
deps = [
        ":http_proto",
        "@com_google_protobuf//:descriptor_proto"
    ],
)

proto_library(
name = 'http_proto',
srcs = ['google/api/http.proto'])

建筑

最后是对来自BUILD文件的annotation.proto的引用:

proto_library(
name = "GreeterServices_proto",
srcs = ["GreeterServices.proto"],
deps = [
    "@googleapi//:annotations_proto",
])

你好,jj

子车凯泽
2023-03-14

您通常可以将. proto复制到您自己的项目并针对它进行构建;只要上游原型没有改变“太多”,它就会继续工作。

例如,如果googleapi调查谁在使用他们的存储库,如果您复制了文件,他们将找不到您的使用情况。

一旦你的回购协议中有了该文件,你就可以按照https://github.com/cgrushko/proto_library/blob/04369f0d2ade8c8566727e0b6f3a53f1ba8925c0/src/BUILD.

外部存储库(例如http_archive)允许您依赖另一个Bazel项目。使用http_archive,它将被下载并作为构建的一部分构建。

使用http_archive,外部项目必须已经使用Bazel构建,googleapi的情况并非如此:它没有google/api/annotations.proto的BUILD文件。

一个选择是与他们交谈,看看他们是否可以添加这样的构建文件(或者自己发送PR)。另一个选项是使用new_http_archive,并提供自己的构建文件作为定义的一部分。

将以下内容添加到工作区文件(在项目的根目录下)应该或多或少有效:

new_http_archive(
  name = "googleapi",
  url = "https://github.com/googleapis/googleapis/archive/common-protos-1_3_1.zip",
  strip_prefix = "googleapis-common-protos-1_3_1/",
  build_file_content = "proto_library(name = 'annotations_proto', srcs = ['google/api/annotations.proto'])"
)

然后,你就可以依靠它来编写你的代码:

proto_library(
  name = "hellow_world_proto",
  ...
  deps = ["@googleapi//:annotations_proto"],
)
 类似资料:
  • 我正在开发一个脚本,该脚本分析SQL表中的数据,最后生成一个CSV文件。 生成文件后,我将登录到我的google sheet帐户,并使用导入选项将我的CSV文件导入到google电子表格中 手工劳动有点愚蠢,我想把这个能力添加到我的脚本中。 因此,我遵循了这个指南,Python快速入门,并且能够完成所有步骤。 然后,我遵循GoogleSheetsAPI参考并研究了方法:电子表格。创造如果我理解正确

  • 我正在将JSON插入Google Big Query中。问题的底部是JSON的模式。 下面是一个JSON示例: 如您所见,有一个“_source.fullname”字段带有“Mike Smith”。 当我试图用它创建表时,它出错了: 为非重复字段指定的数组:_source.fullname。 我相信这个字段是_source的一次性字段。我如何克服这个错误? 下面是模式:

  • 我有一个C#项目,其中添加了dialogflow google api参考。 我想知道是否可以使用它将zip导入到我的dialogflow代理。 如果我能以某种方式在C#中实现这个功能就太好了。 如有任何帮助/建议,将不胜感激。

  • 我目前正在使用Firebase实时数据库。我已经将JSON导入实时数据库,但由于查询的限制,我需要打开Firebase Firestore。 我想将JSON导入Firebase的云Firestore。

  • 最近,我用SpringMvc和swagger ui(v2)编写了RESTfulAPI。我注意到Postman中的导入功能: 所以我的问题是如何创建邮递员需要的文件? 我不熟悉招摇。

  • 我们有一个约200 API的服务。API支持昂首阔步,可在以下位置访问:http://localhost:8080/api-文档。 WSO2 AM提供了一个导入swagger定义的选项。 在导入时,我们是否应该指定基本API-docs URL(http://localhost:8080/API-docs)?在这种情况下,所有API都在一个API下导入(即,所有200个API都出现在publishe