问题标签 [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.
http - gRPC-Gateway:有没有办法以 JSON 数组的形式返回响应?
我正在使用 gRPC-Gateway实现https://todobackend.com/ 。https://todobackend.com/的规范要求一些响应采用 JSON 数组的形式,例如:
但是通过使用 gRPC-Gateway AFAIK,我必须返回对象,例如{ "todos": [{ ... }, { ... }] }
. 我可以返回数组而不是对象吗?
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?
go - Golang gRPC 流 XML 文件(服务器端)
目标:当我localhost:9000/xml
在浏览器中打开页面时,我希望看到 xml 内容(很大)。我使用带有grpc-gateway的 gRPC 服务器作为代理。
要发送我的 xml 文件,我使用服务器端流并发送google.api.HttpBody
带有text/xml
内容类型的消息。以下是我用于流式传输 xml 的服务器代码的一部分:
不幸的是,当我localhost:9000/xml
在浏览器中打开时,我看到我的 xml 响应已损坏。每 1025 个字节从一个新行开始,例如:
如何流式传输大型 xml 内容而不破坏它?
http - grpc-gateway:如何为每个请求设置允许的内容类型
我grpc-gateway
在同一个 go 应用程序中使用代理将 HTTP 转换为 GRPC。据我所见,默认情况下为所有 RPCgrpc-gateway
设置应用程序application/json
格式,包括流式传输。
所以,我的任务是:
- 传入的 HTTP 请求必须始终为
Content-type: application/json
,否则应根据 RFC 拒绝请求并发送 406。 - 传入的 HTTP 请求可能已
Accept: application/x-ndjson
为一元 RPC 设置,并Accept: applcation/x-ndjson
为服务器流设置了标头。如果条件不满足406,应该返回。 Content-type: applicaiton/json
对于简单的一元 RPC 和Content-type: application/x-ndjson
服务器流,必须设置传出 HTTP 请求。
因此,grpc-gateway
仅建议设置自定义编组器 for application/x-ndjson
,这实际上与默认编组器相同,因此只需覆盖ContentType
方法。这种方法不允许我为每个方法调用设置封送拆收器,也不允许我拒绝每个请求不支持的内容类型。
我怎样才能做到这一点仍在使用grpc-gateway
?或者我应该考虑手动实现http grpc转换?
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(在同一端口上)时,我做错了什么。
谢谢
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,因此预期的流式传输结果是:
但它会返回意外的格式:
问题:如何使网关返回预期?
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
不知道这里出了什么问题或我需要做什么。
grpc-go - grpc服务器和网关关闭顺序
我的 gRPC 服务使用grpc-gateway服务 http 请求。
为了让服务正常关闭,有什么需要注意的顺序吗?即是关机命令
A. gRPC 服务 -> 网关
B. 网关 -> gRPC 服务
我能找到的唯一文章/文档是这里,推荐 A 但没有解释原因。我自己对 A 的推理是,我们需要网关处于活动状态才能路由未完成的 gRPC 请求。但这不受任何文档的支持。
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。