问题标签 [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 回答
510 浏览

http - gRPC-Gateway:有没有办法以 JSON 数组的形式返回响应?

我正在使用 gRPC-Gateway实现https://todobackend.com/ 。https://todobackend.com/的规范要求一些响应采用 JSON 数组的形式,例如:

但是通过使用 gRPC-Gateway AFAIK,我必须返回对象,例如{ "todos": [{ ... }, { ... }] }. 我可以返回数组而不是对象吗?

0 投票
0 回答
190 浏览

grpc-gateway - grpc-gateway how to make validation work for http request as well?

I have build a grpc/http sever with grpcecosystem/grpc-gateway and I use go-proto-validators to generate validation code, it works well in grpc with grpc.UnaryInterceptor.

However, the http requests seems not pass through the validation function. Add a http middleware did not work, because the validation can be done only after the http request has been passed into protobuf data structures, which are implemented by the auto-generated code, modify every function is obviously meaningless.

Is there a way to solve this problem execpt call validate function manually in every rpc function?

0 投票
0 回答
302 浏览

go - Golang gRPC 流 XML 文件(服务器端)

目标:当我localhost:9000/xml在浏览器中打开页面时,我希望看到 xml 内容(很大)。我使用带有grpc-gateway的 gRPC 服务器作为代理。

要发送我的 xml 文件,我使用服务器端流并发送google.api.HttpBody带有text/xml内容类型的消息。以下是我用于流式传输 xml 的服务器代码的一部分:

不幸的是,当我localhost:9000/xml在浏览器中打开时,我看到我的 xml 响应已损坏。每 1025 个字节从一个新行开始,例如:

如何流式传输大型 xml 内容而不破坏它?

0 投票
1 回答
902 浏览

http - grpc-gateway:如何为每个请求设置允许的内容类型

grpc-gateway在同一个 go 应用程序中使用代理将 HTTP 转换为 GRPC。据我所见,默认情况下为所有 RPCgrpc-gateway设置应用程序application/json格式,包括流式传输。

所以,我的任务是:

  1. 传入的 HTTP 请求必须始终为Content-type: application/json,否则应根据 RFC 拒绝请求并发送 406。
  2. 传入的 HTTP 请求可能已Accept: application/x-ndjson为一元 RPC 设置,并Accept: applcation/x-ndjson为服务器流设置了标头。如果条件不满足406,应该返回。
  3. Content-type: applicaiton/json对于简单的一元 RPC 和Content-type: application/x-ndjson服务器流,必须设置传出 HTTP 请求。

因此,grpc-gateway仅建议设置自定义编组器 for application/x-ndjson,这实际上与默认编组器相同,因此只需覆盖ContentType方法。这种方法不允许我为每个方法调用设置封送拆收器,也不允许我拒绝每个请求不支持的内容类型。

我怎样才能做到这一点仍在使用grpc-gateway?或者我应该考虑手动实现http grpc转换?

0 投票
0 回答
285 浏览

rest - 在云端运行 GRPC 和 HTTP 端点(grpc-gateway)

是否可以在同一云运行服务器上同时运行 grpc 和 rest API?我发现了一些博客并尝试在我的本地系统上编写和运行它,但它给出了错误代码 14。

我的原型文件包含这样的服务:

现在,如果我从 BloomRPC 客户端运行它,则会收到以下错误:

如果尝试从邮递员那里访问其余 API ( http://127.0.0.1:8080/v1/admin/test/message ),则会出现以下错误:

如果我只运行 GRPC 服务并从 BloomRPC 客户端检查它,那么它工作正常。这是工作 GRPC 主要功能:

尝试同时运行 GRPC 和 rest api(在同一端口上)时,我做错了什么。

谢谢

0 投票
1 回答
84 浏览

streaming - Grpc-gateway 对 com.google.protobuf.wrappers.StringValue 结果进行奇怪的包装

我有具有以下功能的 GRPC 服务:

背后有grpc-gateway 。

一旦我收集了 3 个字符串:“msg1”、“msg2”、“msg3” - 将每个字符串包装为 com.google.protobuf.wrappers.StringValue 并作为流返回。在 GRPC 方面一切正常,但是当我尝试通过网关执行 REST 请求时,问题发生了:

根据文档,google.protobuf.StringValue 的 Json 表示只是 JsonString,因此预期的流式传输结果是:

但它会返回意外的格式:

问题:如何使网关返回预期?

0 投票
0 回答
251 浏览

go - grpc-gateway 服务没有响应 grpcurl 或 curl

我用 grpc-gateway 创建了一个基本服务。这就是我的 .proto 文件的样子

我使用以下代码生成并启动服务

现在,当我尝试 curl 命令时,例如, curl http://localhost:3001/ping我收到以下错误 curl: (7) Failed to connect to localhost port 3003: Connection refused

当我尝试 grpcurl 时 grpcurl --plaintext localhost:3002 list,出现以下错误 failed to dial target host "localhost:3002": dial tcp 127.0.0.1:3002: connect: connection refused

不知道这里出了什么问题或我需要做什么。

0 投票
1 回答
353 浏览

json - 为什么 grpc-gateway 生成字符串字段而不是 int 或 float?

大家好

当我尝试在消息中生成具有不同字段的 protobuf 时,它会以某种方式在文档中生成字符串字段而不是 int 或 float

我将附上原型文件代码和结构代码。

在此处输入图像描述

在此处输入图像描述

0 投票
0 回答
104 浏览

grpc-go - grpc服务器和网关关闭顺序

我的 gRPC 服务使用grpc-gateway服务 http 请求。

为了让服务正常关闭,有什么需要注意的顺序吗?即是关机命令

A. gRPC 服务 -> 网关

B. 网关 -> gRPC 服务

我能找到的唯一文章/文档是这里,推荐 A 但没有解释原因。我自己对 A 的推理是,我们需要网关处于活动状态才能路由未完成的 gRPC 请求。但这不受任何文档的支持。

0 投票
2 回答
670 浏览

http - 如何将带有请求正文的 HTTP DELETE 转码为 gRPC

我是使用带有 proto3 的 gRPC 的新手,并且我曾经Transcoding HTTP/JSON to gRPC将现有的 http 端点迁移到 grpc。

但是我有带有请求正文的 http DELETE 请求。我已尝试关注并收到错误。

Grpc 端点:

protoc gererate 命令如下

我遇到的错误

然后我添加--allow_delete_body=true到我的 protoc 命令中,如下所示。

我的 go.mod 中的 grpc 版本

谁能解释一下我如何将 HTTP DELETE 转码为带有请求正文的 grpc。