问题标签 [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 投票
3 回答
4716 浏览

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

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

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

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

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

据我从这个页面得到的似乎不太可能。我希望我忽略了一些东西。

0 投票
0 回答
630 浏览

javascript - 为什么 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-gatewaywith时会变得很困难。--swagger_out

0 投票
1 回答
710 浏览

google-api - Google gRPC 网关:覆盖响应字段?

我目前正在创建一个 gRPC 服务,该服务使用 gRPC 网关/HTTP 反向代理来提供 HTTP 支持。我想遵循 Google API 设计的通用约定。

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

我想说这是一个应该由 protoc-gen-swagger 插件解决的问题,除了它确实在做它应该做的事情。是否有 HTTP 注释以某种方式处理或覆盖响应中的字段?如果不是,人们如何处理这个问题?

0 投票
2 回答
207 浏览

routes - grpc-gateway 端点优先顺序

我有这样定义的服务:

问题是,即使我调用search?q=MyQuery它,它也会被该GetCategory方法捕获并尝试获取具有 id 的类别search

我想这是因为路径非常接近。有没有一种方法可以像在经典 Web 应用程序中那样定义路由的优先级?

谢谢

0 投票
1 回答
801 浏览

protocol-buffers - gRPC protobuf bindings: Are changes to fileDescriptor breaking changes?

I am currently developing a gRPC service in Go with gRPC Gateway as an HTTP proxy. I am generating .pb.go bindings from my .proto files, but I noticed that there are subtle changes to my bindings in two separate but related situations when I wouldn't expect it. Each binding file has a mysterious field var fileDescriptorX = byte[]{.....} where X is actually a number. Both unexpected changes happen with this field and only this field.

My big question: Are these bindings compatible with each other or are changes to this field considered breaking changes, rendering different versions of the bindings incompatible?

First, if I add another proto file to the same folder and it comes alphabetically before the existing protos, the fileDescriptor field will be renamed when I re-generate my Go bindings. The number X at the end of the name of the field fileDescriptorX corresponds to its ordering compared to the other files in the folder. To be clear, if I have a folder with b.proto and b.pb.go, then I add a.proto and then re-reun my compiler to create a.pb.go, b.pb.go's file descriptor will get bumped from 0 to 1, and a.pb.go will get the new filedescriptor0.

Second, since I am using gRPC gateway, I wanted to change the paths in my HTTP options. Let's say I have an RPC in a.proto:

When I change the path above to "/api/foo/v1alpha1/foo", a.pb.gw.go changes understandably, but the bytes in a.pb.go's fileDescriptor0 field change as well.

There doesn't seem to be any documentation discussing how these fields are used and if changes in them are incompatible, breaking changes with other bindings. Any help is appreciated. Thanks!

0 投票
0 回答
494 浏览

rest - grpc-gateway:POST 成功返回 201

使用 grpc-gateway 在成功的 POST 上返回 HTTP 201 的惯用方式是什么?

编写过滤器函数似乎很有希望,但我不确定如何一般地执行此操作,因为我无权访问请求(并且无法确定使用的 HTTP 动词)

更换响应转发器似乎拥有所有需要的信息,但它需要连接每个适用的请求,这很容易出错。

我知道没有可以映射的与 HTTP 201 等效的 gRPC 状态,因此这必须完全存在于 grpc-gateway 代码中。

0 投票
0 回答
403 浏览

protocol-buffers - 如何根据消息内容拦截和转发 GRPC 调用

我希望能够RPC根据消息的内容将呼叫转发到不同的实现。

我进行了研究GRPC interceptors,但该网站对此没有很好的解释。我似乎找不到关于这个主题的好文档

我的proto文件看起来像:

现在在我的代码中,我想根据数据源值有条件地实现函数

目前我正在对每个函数进行条件检查

IE:

所以基本上这非常麻烦且容易出错 - 我需要为每个函数添加一堆样板

我想知道我是否可以改为创建不同的实现者,然后通过中间件将 RPC 调用转发到应该执行逻辑的正确版本。

0 投票
1 回答
2197 浏览

rest - 在 http 请求中设置 grpc 元数据

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

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

0 投票
1 回答
1047 浏览

go - gRPC 和 Swagger 注解的区别

我有一个协议缓冲区定义,其中包括google.protobuf.Timestamp作为消息的一部分。Timestamp 消息非常简单,具有以下定义:

因此 gRPC 有效负载按预期作为一个简单的值元组出现。但是,我还想为同一消息的 REST API 生成一些大张旗鼓的注释,但它似乎将时间戳转换为 RFC 3339 样式字符串:

我最近开始使用协议缓冲区和 gRPC,所以我不确定我是否在这里遗漏了什么,但这似乎与 grpc-gateway 实现不一致。为什么 REST 的格式与 gRPC 有效负载不同?还是我错过了一些方法来告诉 protoc-gen-swagger 不要将消息转换为字符串?

0 投票
1 回答
3365 浏览

rest - Protobuf 字段掩码可以仅应用于 grpc 的情况吗?

让我们以官方文档中的这个例子为例:

如果我没有 grpc 网关并且只使用 grpc,我可以这样使用掩码吗:

如果是这样,该掩码应该如何工作 - 过滤器请求?或在数据库保存期间应用,它如何知道数据库......所以我对使用它有点困惑。在我自己的 grpc 示例中,我看到掩码不会过滤请求。