如果系统无法更新,gRPC InvalidArgument 或 FailedPrecondition

问题描述 投票:0回答:1

假设我们有一个 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 的参数。

无效参数:

  • 资源无法更新,因此请求总是失败,因此无效

失败的前提条件:

  • 需要检查系统的状态来查看资源的版本是什么,你无法先验地确定请求是否可能
  • 尽管系统目前不允许此类更新,但理论上可以进行更新以使请求变得可接受
grpc error-code grpc-go
1个回答
0
投票

根据您的描述,您可能应该使用 FAILED_PRECONDITION。就像https://grpc.github.io/grpc/core/md_doc_statuscodes.html中提到的那样:INVALID_ARGUMENT表示有问题的参数。但在你的情况下,参数是正确的,但系统不允许更新,因此我认为 FAILED_PRECONDITION 更适合。

© www.soinside.com 2019 - 2024. All rights reserved.