http - gRPC 服务器错误处理程序 golang

标签 http go grpc protoc

我想了解有关 golang、gRPC 和 protobuf 的良好实践。

我正在实现以下 gRPC 服务

service MyService {
   rpc dosomethink(model.MyModel) returns (model.Model) {
     option (google.api.http) = { post: "/my/path" body: "" };
   }
}

我编译了 protobufs。事实上,protobuf 给了我们一个从 http 到 grpc 的 httpproxy。

实现该服务的代码:

import "google.golang.org/grpc/status"

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {

   return nil, status.New(400,"Default error message for 400")
}

我想要一个 400 http 错误(在 http 代理中),消息为“400 的默认错误消息”,该消息有效,但 http 错误始终为 500。

你知道关于这个的任何帖子或文档吗?

最佳答案

您需要返回空的 model.Model 对象,以便 protobufs 能够正确序列化消息。

尝试

import "google.golang.org/grpc/status"

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {

   return &model.Model{}, status.Error(400,"Default error message for 400")
}

关于http - gRPC 服务器错误处理程序 golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45455144/

相关文章:

python - 如何从 urllib 中读取 lines()

python - 使用 HttpLib 的 HTTP 获取请求 "Moved Permanently"

proxy - 如何代理 gRPC 调用

python - 做更多的标题意味着服务器更有可能认为你是人类

android - 如何在 Go 和 Android 之间使用 RSA

go - 使用 Go SDK,如何将 DynamoDB 表项字段设置为 map ?

go - slice 内容的大小(以字节为单位)

node.js - Electron 重建 grpc 构建失败

java - 如何使用 keystore 在 grpc 中使用 java 启用 ssl

c# - SendAsync 正在阻塞 UI 线程