问题标签 [grpc-gateway]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
76 浏览

protocol-buffers - 使用 grpc-gateway 返回一个 json 映射值

我正在使用 grpc-gateway,我想公开一个带有以下 json 响应的 api:

“属性”中的值是动态的,并且无法提前知道。

到目前为止,我的原型定义是:

但这会产生如下响应:

如何修改我的原型,以便在没有额外输入信息的情况下将属性作为 json 映射返回?

0 投票
0 回答
300 浏览

go - 注册在 localhost 上运行的 grpc-gateway 处理程序时连接被拒绝错误

我正在尝试将 grpc-gateway 添加到基于 grpc 的服务中。这是我main.go文件中的一些代码

运行服务器时,我不断收到此错误 [core]grpc: addrConn.createTransport failed to connect to {127.0.0.1:20201 127.0.0.1:20201 <nil> 0 <nil>}. Err: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:20201: connect: connection refused". Reconnecting...

我查看了与此相关的其他 SO 问题和 GH 问题,但它们并没有解决我的问题,而且主要是关于 IPV6 或一些错误配置。

0 投票
0 回答
300 浏览

protocol-buffers - gRPC-Gateway 转码中的自定义 URL 参数

例如,我有这种原型定义:

当我使用 gRPC-gateway 时,基于上面的转码,你可以用这种查询请求

有没有办法重新映射 url 查询参数?

例如变成:

在文档中找不到任何内容

谢谢。

0 投票
0 回答
63 浏览

protocol-buffers - 如何使用 gRPC 网关将带连字符的参数更改为下划线

我有一个使用 gRPC 网关将 REST 请求转换为 gRPC 的应用程序。

其中一个请求有一个可选参数,例如foo-bar,但我的 .proto 文件不接受连字符/减号,因此我将此字段创建为foo_bar.

但是当然,gRPC Gateway 并不理解它们是同一个参数。

有没有办法这样做?

更新

在我们的案例中,我们使用来自 AWS 的 API Gateway 中的集成请求解决了问题,映射foo-barfoo_bar我们的应用程序中。

0 投票
1 回答
540 浏览

http - 向 grpc-gateway 服务器发出请求时出现 HTTP2 PROTOCOL_ERROR

所以我在 Golang 中有一个 grpc 服务,我想在它上面暴露一个 HTTP API,所以我在服务中添加了 grpc-gateway。

当我尝试向我的服务发出 HTTP 请求时,它失败并出现一个奇怪的错误 500 Internal Server Error caused by: stream error: stream ID 19; PROTOCOL_ERROR

这发生在负载均衡器将请求转发到 http 端口(运行 grpc-gateway 的端口)之后

它是一个不稳定的错误,大多数时候请求都会失败,但有时请求会毫无错误地通过

查看浏览器中的请求,我看到当从前端发送请求时,它会添加此标头TE: trailers ,并根据此线程上的 评论https://github.com/golang/go/issues/29125#issuecomment-676831990 TE 标头会导致此问题。因此,我尝试使用 traefik 中间件删除 TE 标头,但即使这样也没有解决问题,即使在标头到达 http 端口之前删除了标头,请求仍然失败并出现相同的错误。

然后我打开GODEBUG=http2debug=2并在日志中找到了这个

现在,即使是日志也不是很有帮助,或者我不知道如何阅读它们,而且我遗漏了一些明显的东西

curl 请求的形式为curl -X POST -H "Content-Type: application/json" "https://domain.name.com/v1/someAPI/Create" -d "{\"name\": \"test\" }"

有人可以告诉我出了什么问题,这是 stdlib 中的错误吗?如果不是,如果有人能告诉我如何阅读 http2 日志或在标准库中查找这些日志的来源,那仍然会有很大帮助

0 投票
0 回答
545 浏览

http - 如何实现 gRPC 网关 mux 处理程序以处理 Go 中的多个 http 方法

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

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

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

我找不到任何替代解决方案来在同一个处理程序函数中使用不同的方法。

  1. 有没有办法在一个处理程序中使用 grpc-gateway 处理不同的方法?
  2. 单独处理方法和在一个处理函数中处理方法之间没有区别吗?
0 投票
0 回答
24 浏览

go - grpc-gateway/v2/runtime 的未解决参考“MustPattern”

当我使用此命令生成 grpc-gateway 文件时,输出文件显示此错误“未解析的引用'MustPattern'”

我输入的命令是protoc -I=. --grpc-gateway_out=paths=source_relative,grpc_api_configuration=./test.yaml:./test.proto

此图片上显示的错误详细信息: 在此处输入图片描述

即使它显示这个错误,但我仍然可以正确使用这个输出文件,我只是想知道如何修复它,谢谢!

0 投票
0 回答
80 浏览

angular - 我们可以从 Angular 客户端访问 grpc-gateway 的 API 端点吗?访问时出现 CORS 错误

我有从 grpc github 示例(https://github.com/grpc/grpc/blob/master/examples/python/route_guide/route_guide_server.py)中获取的 grpc python 服务器和 grpc 网关代码。

当我尝试以可视代码从 REST 客户端访问 Http API 端点时,我能够得到响应。但是当我尝试从 Angular 客户端访问 grpc 网关的 API 端点时,我在控制台中遇到了 cors 错误。

知道如何解决 grpc 网关中的 CORS 问题吗?

我可以直接访问 grpc 网关生成的 API 端点吗?

或者我需要 grpc 网关上的任何包装器?

访问 grpc 网关端点时控制台出现 CORS 错误

访问 grpc 网关端点时控制台出现 CORS 错误

在 VS 代码中从 REST 客户端访问时获得响应

在 VS 代码中从 REST 客户端访问时获得响应

0 投票
1 回答
2311 浏览

go - 为什么我在 go 中收到服务器序言之前关闭连接?

我正在尝试使用grpc-gateway在同一端口上的 GRPC 服务器上设置 rpc 服务器和代理 HTTP 服务器。奇怪的是,有时我会failed to receive server preface within timeout随机出错。大多数情况下,它发生在服务重新启动时。它开始工作并在重试几次后返回正确的响应。我不确定发生了什么。有人可以帮帮我吗?这是服务启动片段

0 投票
0 回答
81 浏览

go - 如何从 grpc-gateway 发送错误正文?

我们grpc-gateway在我们的服务中使用。在服务中,我们正在调用一个 API,并将从 API 中获取一些用于非 2XX 响应的错误代码。我们必须包装该错误并从服务中返回它。

我正在使用grpc状态从服务中返回它。

代码:

我在详细信息中使用自定义错误主体来牢记未来的可扩展性。

JSON:

我也以 protobuf 路径作为值来获取此@type属性。有人知道我怎样才能摆脱这个@type 属性,或者有没有更好的方法来返回错误正文?