Protocol buffers grpc和协议缓冲区的交叉langauge自定义错误

Protocol buffers grpc和协议缓冲区的交叉langauge自定义错误,protocol-buffers,grpc,grpc-go,cross-language,Protocol Buffers,Grpc,Grpc Go,Cross Language,我公司的grpc服务定义为 service SomeService { rpc upload (UploadRequest) returns (UploadReply) {} } 比如说。客户端是用Java/Kotlin和Swift编写的移动应用程序,后端是Golang。客户端将上载一张照片,然后出于各种原因在后端解析。如果输入的文档质量很差,我希望返回PoorQualityImageError,BlurryImageError等,以便移动端可以向用户提供有用的错误信息。我似乎找不到,

我公司的grpc服务定义为

service SomeService {
    rpc upload (UploadRequest) returns (UploadReply) {}
}
比如说。客户端是用Java/Kotlin和Swift编写的移动应用程序,后端是Golang。客户端将上载一张照片,然后出于各种原因在后端解析。如果输入的文档质量很差,我希望返回
PoorQualityImageError
BlurryImageError
等,以便移动端可以向用户提供有用的错误信息。我似乎找不到,也许grpc的“在线”方面永远不会允许这种情况,一种允许自定义错误类型的解决方案

我需要的指导是,从哪里开始寻找解决此类问题的方法。什么技术(grpc、protobufs等)可以解决我需要的问题?如果没有,我问错问题了吗?有没有更好的方法来思考这个问题

可能的解决方案:

  • 字符串解释
  • 最简单的解决方案(技术债务的刺耳警告标志)似乎是定义一个自定义grpc代码
    BAD_REQUEST
    ,然后在错误消息属性中有一个自定义字符串。不过,这对我来说是个坏主意,因为您将根据任意字符串编写/读取消息属性,以找出错误“type”

  • 使用枚举的结构出错
  • 我考虑过的其他选项是在
    UplodReply
    中返回一个error protobuf struct,其中包含一个指示错误类型的枚举。同样,这似乎也不是最佳解决方案。我们(潜在地)有大量的错误,这些错误可能是映像所造成的,并且有一长串映射到枚举中的数字的错误,看起来它也会随着时间的推移而爆炸。我很想处理错误类型,如果我在Golang,移动端可以检查该字段返回的错误(如果不是零)


    TLDR;我正在尝试使用grpc和协议缓冲区创建一个跨平台/语言自定义错误系统。

    grpc本身内置了数量有限的故障代码。其公开方式取决于框架(例如,通过.NET中的RpcException)。这还包括状态文本和预告片。但其他的一切都需要你。