当我执行 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) 我目前正致力于创建一个使用gRPC网关/ HTTP反向代理的gRPC服务,以提供HTTP支持.我想遵循Google API设计的通用惯例.
我在Google API设计指南中找到的示例使用google.protobuf.Empty
消息来表示删除方法/ RPC的响应.这很好,但是当我使用来自grpc-gateway的protoc- gen-swagger从文件生成.swagger.json
文件时,消息的描述将被作为响应对象的描述拉入.这与我的API用户无关,可能会让人感到困惑,因为使用HTTP网关的人不使用protobufs..proto
google.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) 我使用grpc-gateway从我的 proto 定义中托管一个 HTTP 服务器。整体效果很好。
但是,对于一个特殊的端点,我不想返回一个值,而是对 s3 中托管的图像进行 302 重定向。
如果你想通过 grpc-gateway 返回一个错误,你可以像这样返回它
nil, status.Error(codes.Unauthenticated, "Nope")
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的东西可以做 302 重定向?
为什么 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时会变得很困难。
我有使用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) 让我们从官方文档中拿这个例子:
// 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) 我们已经有了Twrip-RPC,它提供了 rpc 和 Rest 端点。那么为什么我们需要 grpc-Gateway。与 twirp 相比,它具有哪些优势。唯一的区别是我们可以通过 grpc 网关提供自定义端点吗?Twrip-rpc 不能做什么 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) 我们想将一个具有一个属性的对象/结构作为 golang 中的空列表/数组/切片返回给客户端(浏览器)。从 go 代码我们返回 len=0 和 capacity=0 的空切片,但是通过 protobuf 这个键被删除或设置为 nil 并被删除。
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 语法。
我正在尝试使用 grpc-gateway 为现有 gRPC 服务创建 REST 端点。gRPC 服务利用 grpc 调用中传递的“元数据”进行身份验证。如何在 REST 调用中设置元数据?
我尝试在标头中传递元数据键值对。但它没有在上下文中设置元数据。
如何在grpc-gateway中设置超时?
我想限制请求执行的时间,在哪里可以设置时间限制?我需要为此创建一个“拦截器”吗?
我有一个由 grpc-gateway 代理的 grpc 服务器。当我对网关端点进行 HTTP 调用时,会调用我对应的 grpc 服务方法。现在,grpc 服务实现接收一个具有标头的上下文。我不知道如何访问标题。
当我调试我的 grpc 服务并设置断点时,这是我的服务接收的 Context 对象的结构。现在,如何获取任何 HTTP 请求标头的值?
grpc-gateway ×12
go ×8
grpc ×7
grpc-go ×2
rest ×2
google-api ×1
gorilla ×1
grpc-python ×1
http ×1
javascript ×1
protoc ×1
python-3.x ×1
swagger ×1
twirp ×1