假设我们有一个 gRPC DB 支持的应用程序,其中包含一些资源
X
,例如在 Go 中:
type X struct {
id string
name string
version string
}
由于某种原因,应用程序不允许更新,除非
version = "2"
。
如果客户端尝试请求更新其
version = "1"
的现有资源的名称,如下所示:
// This exists in the DB.
x := X{
id: "xyz",
version: "1",
name: "some name",
}
UpdateX(
X{
id: "xyz",
name: "some other name",
},
)
应该返回什么 gRPC 错误代码?
参考这里的代码:https://grpc.github.io/grpc/core/md_doc_statuscodes.html,我可以看到 INVALID_ARGUMENT 和 FAILED_PRECONDITION 的参数。
无效参数:
失败的前提条件:
根据您的描述,您可能应该使用 FAILED_PRECONDITION。就像https://grpc.github.io/grpc/core/md_doc_statuscodes.html中提到的那样:INVALID_ARGUMENT表示有问题的参数。但在你的情况下,参数是正确的,但系统不允许更新,因此我认为 FAILED_PRECONDITION 更适合。