You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DB的gRPC应用中资源版本不符更新条件时应返回何种错误码?

gRPC错误码选择:更新低版本资源场景

我们有一个基于数据库的gRPC应用,其中Go语言定义的资源X如下:

type X struct {
    id      string
    name    string
    version string
}

该应用仅允许version = "2"的资源执行更新操作。

当客户端尝试更新一个version = "1"的现有资源名称时,示例代码如下:

// 该资源已存在于数据库中
x := X{
    id:      "xyz",
    version: "1",
    name:    "some name",
}

UpdateX(
    X{
        id:      "xyz",
        name:    "some other name",
    },
) 

此时应返回FAILED_PRECONDITION错误码,具体分析如下:

候选错误码对比

INVALID_ARGUMENT

支持理由:认为该资源无法被更新,请求必然失败,因此属于无效请求。但这个判断并不准确——INVALID_ARGUMENT适用于请求本身存在语法错误、参数格式非法等无需依赖系统状态就能直接判定无效的场景,而本次请求的参数(id、name)本身是合法的。

FAILED_PRECONDITION

支持理由:

  • 请求是否可行必须依赖系统状态(数据库中资源的当前版本)才能判定,无法提前预判
  • 当前系统不允许该更新,但可以通过修改系统状态(比如先将资源版本升级为2)让后续相同格式的请求变为可接受状态

综上,该场景完全符合FAILED_PRECONDITION的适用场景:操作因系统当前的前置状态不满足而无法执行,且该状态是可以通过其他操作改变的。

内容的提问来源于stack exchange,提问作者Paul Slevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:43:17