标签: grpc-gateway

如何调查/修复:不明确的导入:在多个模块中找到包 cloud.google.com/go/compute/metadata

当我执行 go mod tidy (go v1.19) 时,我收到以下错误。我确实在我的 go pkg 目录中看到了这两个包。我认为 v1.6.1 是最新版本并且是要保留的版本。如果这是真的,我如何确定谁在旧的 v0.34.0 版本中拖动并纠正它?我很感激你的建议。

感谢您的时间和兴趣,迈克

github.com/abc/runimage/v5/core/service imports
    github.com/grpc-ecosystem/go-grpc-middleware/auth tested by
    github.com/grpc-ecosystem/go-grpc-middleware/auth.test imports
    google.golang.org/grpc/credentials/oauth imports
    golang.org/x/oauth2/google imports
    cloud.google.com/go/compute/metadata: ambiguous import: found package cloud.google.com/go/compute/metadata in multiple modules:
    cloud.google.com/go v0.34.0 (/Users/mike/Go/pkg/mod/cloud.google.com/go@v0.34.0/compute/metadata)
    cloud.google.com/go/compute v1.6.1 (/Users/mike/Go/pkg/mod/cloud.google.com/go/compute@v1.6.1/metadata)
make: *** [tidy] Error 1
Run Code Online (Sandbox Code Playgroud)
// go.mod 

module github.com/abc/runimage/v5

go 1.19

require (
    github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
    github.com/labstack/gommon v0.3.1
    google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58
    google.golang.org/grpc v1.48.0
    google.golang.org/protobuf v1.28.1
)

require (
    github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.2
    github.com/joho/godotenv v1.4.0
)

require (
    github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d // indirect
    github.com/go-resty/resty/v2 v2.7.0 …
Run Code Online (Sandbox Code Playgroud)

go google-cloud-platform grpc-gateway

13
推荐指数
1
解决办法
6035
查看次数

Google gRPC Gateway:覆盖响应字段?

我目前正致力于创建一个使用gRPC网关/ HTTP反向代理的gRPC服务,以提供HTTP支持.我想遵循Google API设计的通用惯例.

我在Google API设计指南中找到的示例使用google.protobuf.Empty消息来表示删除方法/ RPC的响应.这很好,但是当我使用来自grpc-gateway的protoc- gen-swagger从文件生成.swagger.json文件时,消息的描述将被作为响应对象的描述拉入.这与我的API用户无关,可能会让人感到困惑,因为使用HTTP网关的人不使用protobufs..protogoogle.protobuf.Empty

...
"paths": {
  "/v1/{name}": {
    "delete": {
      "summary": "Deletes a book.",
      "operationId": "DeleteBook",
      "responses": {
        "200": {
          "description": "",
          "schema": {
            "$ref": "#/definitions/protobufEmpty"
          }
        }
      },
      ...
    }
  }
},
"definitions": {
  "protobufEmpty": {
    "type": "object",
    "description": "service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
    "title": "A generic empty message that you can re-use to …
Run Code Online (Sandbox Code Playgroud)

google-api protocol-buffers swagger grpc grpc-gateway

8
推荐指数
1
解决办法
357
查看次数

如何在 grpc-gateway 中进行 302 重定向

我使用grpc-gateway从我的 proto 定义中托管一个 HTTP 服务器。整体效果很好。

但是,对于一个特殊的端点,我不想返回一个值,而是对 s3 中托管的图像进行 302 重定向。

如果你想通过 grpc-gateway 返回一个错误,你可以像这样返回它

nil, status.Error(codes.Unauthenticated, "Nope")
Run Code Online (Sandbox Code Playgroud)

我想知道是否有类似的东西可以做 302 重定向?

就我从该页面获得的信息而言,似乎不太可能。我希望我忽略了一些东西。

go grpc-gateway

6
推荐指数
2
解决办法
3821
查看次数

为什么 Protobuf JavaScript 编译器给集合加上“List”、“Map”等后缀?

为什么 protobuf JavaScript 代码生成器将集合后缀为集合类型?

例如:

  • repeated string names 变成 obj.namesList
  • map<string, string> bar 变成 obj.barMap

这是根据文档,在这里:https : //developers.google.com/protocol-buffers/docs/reference/javascript-generated#repeated

这是为什么?

由于 swagger API 定义与生成的 JavaScript 不匹配grpc-gateway--swagger_out因此在使用with时会变得很困难。

javascript protocol-buffers grpc-gateway

6
推荐指数
0
解决办法
534
查看次数

如何实现 gRPC 网关 mux 处理程序来处理多个 http 方法

我有使用gorilla/mux实现的 REST HTTP 处理程序。我正在尝试将它们迁移到 gRPC 中。有一些处理程序执行文件上传和下载。因此,我的客户决定在 gRPC 网关中实现这些处理程序。

我的 mux 处理程序之一处理多个 HTTP 方法,并根据一个处理程序函数中的 HTTP 方法执行操作。示例代码如下所示。

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
)

func main() {
    r := mux.NewRouter()
    r.HandleFunc(`/doSomething`, func(writer http.ResponseWriter, request *http.Request) {
        switch request.Method {
        case http.MethodPost:
            // create something
            fmt.Fprint(writer, "POST")
        case http.MethodGet:
            // return something
            fmt.Fprint(writer, "GET")
        case http.MethodPut:
            // update something
            fmt.Fprint(writer, "PUT")
        case http.MethodDelete:
            // delete something
            fmt.Fprint(writer, "DELETE")

        }
    })
    http.ListenAndServe(`:5000`, r)
}
Run Code Online (Sandbox Code Playgroud)

当我实现类似的 grpc 网关复用处理程序来使用grpc-ecosystem/grpc-gateway/v2.3.0处理这些请求时,我必须编写单独的处理程序函数来处理同一路径的不同 HTTP 方法。示例代码如下。

package …
Run Code Online (Sandbox Code Playgroud)

http go gorilla grpc-gateway grpc-go

6
推荐指数
1
解决办法
2456
查看次数

Protobuf Field Mask可以应用于grpc唯一案例吗?

让我们从官方文档中拿这个例子:

// Updates a book.
rpc UpdateBook(UpdateBookRequest) returns (Book) {
  // Update maps to HTTP PATCH. Resource name is mapped to a URL path.
  // Resource is contained in the HTTP request body.
  option (google.api.http) = {
    // Note the URL template variable which captures the resource name of the
    // book to update.
    patch: "/v1/{book.name=shelves/*/books/*}"
    body: "book"
  };
}

message UpdateBookRequest {
  // The book resource which replaces the resource on the server.
  Book book = 1; …
Run Code Online (Sandbox Code Playgroud)

rest go grpc grpc-gateway

5
推荐指数
1
解决办法
693
查看次数

grpc-gateway 与 Twirp RPC 有什么区别

我们已经有了Twrip-RPC,它提供了 rpc 和 Rest 端点。那么为什么我们需要 grpc-Gateway。与 twirp 相比,它具有哪些优势。唯一的区别是我们可以通过 grpc 网关提供自定义端点吗?Twrip-rpc 不能做什么 grpc-gateway?

go grpc twirp grpc-gateway grpc-go

5
推荐指数
1
解决办法
3617
查看次数

如何为 python 运行 grpc-gateway

我是 grpc 菜鸟,想创建一个 REST 端点来检查 grpc 服务器的健康状况。为此我决定使用 grpc 网关。

但是,文档中用于将 grpc 代理为 json 的 grpc-REST 网关的示例仅适用于 Golang。但我有一个 python 后端,想要使用 Google Cloud Endpoints 制作一个基于 gRPC 的 api,可以对传入的 REST 请求进行转码

我确实在这个 stackoverflow答案中找到了手动生成注释的方法。但我想知道最好的方法是什么。这是我想要生成到类中的示例 .proto 文件。

 syntax = "proto3";
 package example;
+
+import "google/api/annotations.proto";
+
 message StringMessage {
   string value = 1;
 }

 service YourService {
-  rpc Echo(StringMessage) returns (StringMessage) {}
+  rpc Echo(StringMessage) returns (StringMessage) {
+    option (google.api.http) = {
+      post: "/v1/example/echo"
+      body: "*" …
Run Code Online (Sandbox Code Playgroud)

python-3.x grpc protoc grpc-gateway grpc-python

5
推荐指数
2
解决办法
4908
查看次数

无法使用 protobuf 生成空数组/golang 代码片段

我们想将一个具有一个属性的对象/结构作为 golang 中的空列表/数组/切片返回给客户端(浏览器)。从 go 代码我们返回 len=0 和 capacity=0 的空切片,但是通过 protobuf 这个键被删除或设置为 nil 并被删除。

protobuf 代码

syntax = "proto3";
package version1;
message ToDo {
     int64 id = 1 ;
     string title = 2;
}
message ReadAllResponse{
     repeated   ToDo  toDos = 1 ;
}
Run Code Online (Sandbox Code Playgroud)

高朗代码:

list := make([]*version1.ToDo, 0) //[]*version1.ToDo{}
output:= version1.ReadAllResponse{
        ToDos: list,
        Api:   "v1",
    }
Run Code Online (Sandbox Code Playgroud)

我得到了实际输出, {api: "v1"}但预期应该是{api: "v1",todos:[]}

请帮助/建议我们修复 protobuf 或 golang 语法。

go protocol-buffers grpc-gateway

4
推荐指数
1
解决办法
1506
查看次数

在http请求中设置grpc元数据

我正在尝试使用 grpc-gateway 为现有 gRPC 服务创建 REST 端点。gRPC 服务利用 grpc 调用中传递的“元数据”进行身份验证。如何在 REST 调用中设置元数据?

我尝试在标头中传递元数据键值对。但它没有在上下文中设置元数据。

rest grpc grpc-gateway

2
推荐指数
1
解决办法
4526
查看次数

如何在grpc-gateway中设置超时?

如何在grpc-gateway中设置超时?
我想限制请求执行的时间,在哪里可以设置时间限制?我需要为此创建一个“拦截器”吗?

go grpc grpc-gateway

2
推荐指数
1
解决办法
3137
查看次数

如何访问代理的 grpc 服务中的请求标头。golang中的grpc网关

我有一个由 grpc-gateway 代理的 grpc 服务器。当我对网关端点进行 HTTP 调用时,会调用我对应的 grpc 服务方法。现在,grpc 服务实现接收一个具有标头的上下文。我不知道如何访问标题。

在此处输入图片说明

当我调试我的 grpc 服务并设置断点时,这是我的服务接收的 Context 对象的结构。现在,如何获取任何 HTTP 请求标头的值?

go grpc grpc-gateway

1
推荐指数
1
解决办法
2563
查看次数