使用grpc和协议缓冲区的跨语言自定义错误

问题描述

我公司的grpc服务定义为

service SomeService {
    rpc upload (UploadRequest) returns (UploadReply) {}
}

例如。客户端是用Java / Kotlin和Swift编写的移动应用程序,后端是Golang。客户会上传一张照片,出于各种原因,我们会将其解析到后端。如果输入文档的质量很差,我希望返回PoorQualityImageErrorBlurryImageError等,以便移动端可以向用户提供有用的错误信息。我似乎找不到,也许grpc的“在线”方面永远都不允许这样做,该解决方案允许自定义错误类型。

我需要指导的地方是从哪里开始找到解决此类问题的方法。哪种技术(grpc,protobufs等)可以满足我的需求?如果没有,我是问错了吗?有没有更好的方法来考虑这一点?

可能的解决方案:

  1. 字符串解释

最简单的(对技术债务的警告标志)解决方案似乎是定义一个自定义的grpc代码BAD_REQUEST,然后在错误消息属性ala this answer中包含一个自定义的字符串。不过,这对我来说是技术上的坏主意,因为您将基于任意字符串来编写/读取message属性,以找出错误“类型”。

  1. 带有枚举的错误结构

我考虑过的其他选项是在UplodReply内返回一个错误protobuf结构,该结构包含一个表示错误type的枚举。同样,这似乎也不是最佳解决方案。我们(潜在地)存在图像可能具有/引起的大量错误,并且存在一长串错误,这些错误映射到枚举中的数字,似乎随着时间的流逝也会爆炸。我很想使用错误类型,如果我在Golang中,移动端可以检查该字段的返回错误(如果不是nil)。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)