索引
BadRequest(消息)BadRequest.FieldViolation(消息)Code(枚举)ErrorInfo(消息)Help(消息)Help.Link(消息)LocalizedMessage(消息)PreconditionFailure(消息)PreconditionFailure.Violation(消息)QuotaFailure(消息)QuotaFailure.Violation(消息)RequestInfo(消息)ResourceInfo(消息)RetryInfo(消息)Status(消息)
BadRequest
描述客户端请求中的违规行为。此类错误侧重于请求的语法方面。
| 字段 | |
|---|---|
field_violations[] |
描述客户端请求中的所有违规行为。 |
FieldViolation
用于描述单个错误请求字段的消息类型。
| 字段 | |
|---|---|
field |
指向请求正文中字段的路径。此值是一个以点分隔的标识符序列,用于标识协议缓冲区字段。 请考虑以下事项: 在此示例中,在 proto 中,
在 JSON 中,相同的值表示为:
|
description |
对请求元素存在问题的原因的说明。 |
reason |
字段级错误的原因。这是一个常量值,用于标识字段级错误的近因。它应在 google.rpc.ErrorInfo.domain 的范围内唯一标识 FieldViolation 的类型。此值不得超过 63 个字符,并且必须与正则表达式 |
localized_message |
针对字段级错误提供本地化错误消息,可安全地返回给 API 使用者。 |
代码
gRPC API 的规范错误代码。
有时可能有多个错误代码都适用。服务应返回适用且最具体的错误代码。例如,如果 OUT_OF_RANGE 和 FAILED_PRECONDITION 两个代码都适用,则前者优先于后者。同样,NOT_FOUND 或 ALREADY_EXISTS 优先于 FAILED_PRECONDITION。
| 枚举 | |
|---|---|
OK |
不是错误信息;成功时返回此项。 HTTP 映射:200 OK |
CANCELLED |
操作已取消(通常是被调用者取消)。 HTTP 映射:499 Client Closed Request |
UNKNOWN |
未知错误。例如,当从另一个地址空间接收到的 HTTP 映射:500 内部服务器错误 |
INVALID_ARGUMENT |
客户端指定的参数无效。请注意,这与 HTTP 映射:400 Bad Request |
DEADLINE_EXCEEDED |
在操作完成之前截止期限已过。对于更改系统状态的操作,即使操作已成功完成,也可能会返回此错误。例如,服务器的成功响应可能会延迟足够长的时间以使截止期限过期。 HTTP 映射:504 Gateway Timeout |
NOT_FOUND |
找不到所请求的部分实体(例如,文件或目录)。 服务器开发者注意:如果要拒绝整个一类用户的请求(例如,功能逐步发布的用户或未正式加入许可名单的用户),则可以使用 HTTP 映射:404 Not Found |
ALREADY_EXISTS |
客户端试图创建的实体(如文件或目录)已经存在。 HTTP 映射:409 Conflict |
PERMISSION_DENIED |
调用者无权执行指定的操作。如果遭拒的原因是由于部分资源已用尽,则不得使用 HTTP 映射:403 Forbidden |
UNAUTHENTICATED |
请求没有相应操作的有效身份验证凭据。 HTTP 映射:401 Unauthorized |
RESOURCE_EXHAUSTED |
部分资源已用尽,可能是每用户配额不足,也可能是整个文件系统的存储空间已用完。 HTTP 映射:429 Too Many Requests |
FAILED_PRECONDITION |
操作被拒绝,因为系统未处于执行该操作所需的状态。例如,要删除的目录非空、将 rmdir 操作应用于非目录等等。 服务实施者可根据以下准则来确定是选择 HTTP 映射:400 Bad Request |
ABORTED |
操作已中止,通常是由于序列程序检查失败或事务中止等并发问题。 请参阅上述准则以确定是选择 HTTP 映射:409 Conflict |
OUT_OF_RANGE |
尝试执行的操作已超出有效范围。例如,查找或读取操作已超出文件末尾。 与
HTTP 映射:400 Bad Request |
UNIMPLEMENTED |
操作在此服务中未实现或不受支持/未启用。 HTTP 映射:501 Not Implemented |
INTERNAL |
内部错误。这意味着底层系统所期望的一些不变量已损坏。此错误代码保留用于严重错误。 HTTP 映射:500 内部服务器错误 |
UNAVAILABLE |
该服务目前不可用。这很可能是一种暂时情况,可以通过退避重试来纠正。 请注意,重试执行非幂等操作并非总是安全的。 请参阅上述准则以确定是选择 HTTP 映射:503 Service Unavailable |
DATA_LOSS |
数据丢失或损坏且不可恢复。 HTTP 映射:500 内部服务器错误 |
错误信息
使用结构化详细信息描述错误的原因。
未启用“pubsub.googleapis.com”API 时,联系该 API 时出现的错误示例:
{ "reason": "API_DISABLED"
"domain": "googleapis.com"
"metadata": {
"resource": "projects/123",
"service": "pubsub.googleapis.com"
}
}
此响应表明 pubsub.googleapis.com API 未启用。
尝试在缺货的区域中创建 Spanner 实例时返回的错误示例:
{ "reason": "STOCKOUT"
"domain": "spanner.googleapis.com",
"metadata": {
"availableRegions": "us-central1,us-east2"
}
}
| 字段 | |
|---|---|
reason |
错误的原因。这是一个常量值,用于标识错误的直接原因。错误原因在特定错误网域内是唯一的。此值不得超过 63 个字符,并且必须与正则表达式 |
domain |
“原因”所属的逻辑分组。错误网域通常是生成错误的工具或产品的注册服务名称。示例:“pubsub.googleapis.com”。如果错误是由某些常见的基础设施生成的,则错误网域必须是标识该基础设施的全局唯一值。对于 Google API 基础架构,错误网域为“googleapis.com”。 |
metadata |
有关此错误的其他结构化详细信息。 键必须与正则表达式 |
帮助
提供指向文档的链接或用于执行带外操作的链接。
例如,如果配额检查失败并显示错误,指出调用项目尚未启用所访问的服务,则此对象可能包含一个网址,该网址直接指向开发者控制台中用于切换相应位的位置。
| 字段 | |
|---|---|
links[] |
指向有关处理当前错误的更多信息的网址。 |
链接
描述网址链接。
| 字段 | |
|---|---|
description |
说明链接提供的服务。 |
url |
链接的网址。 |
LocalizedMessage
提供可安全返回给用户的本地化错误消息,该消息可附加到 RPC 错误。
| 字段 | |
|---|---|
locale |
所用语言区域遵循 https://www.rfc-editor.org/rfc/bcp/bcp47.txt 中定义的规范。例如:“en-US”“fr-CH”“es-MX” |
message |
上述语言区域中的本地化错误消息。 |
PreconditionFailure
描述哪些前提条件未能满足。
例如,如果 RPC 因需要确认服务条款而失败,则可能会在 PreconditionFailure 消息中列出违反服务条款的情况。
| 字段 | |
|---|---|
violations[] |
描述所有前提条件违规情况。 |
违规
用于描述单个前提条件失败的消息类型。
| 字段 | |
|---|---|
type |
PreconditionFailure 的类型。我们建议使用特定于服务的枚举类型来定义支持的前提条件违规主题。例如,“TOS”表示“违反《服务条款》”。 |
subject |
失败的主题(相对于类型)。例如,相对于“TOS”类型的“google.com/cloud”表示所引用的服务条款。 |
description |
有关前提条件失败原因的说明。开发者可以根据此说明了解如何修复故障。 例如:“尚未接受服务条款”。 |
QuotaFailure
描述配额检查失败的方式。
例如,如果调用项目的每日限额被超出,服务可能会返回一个 QuotaFailure 详情,其中包含项目 ID 和超出限额的说明。如果调用项目尚未在开发者控制台中启用该服务,则服务可能会以项目 ID 进行响应,并将 service_disabled 设置为 true。
另请参阅 RetryInfo 和 Help 类型,了解有关处理配额失败的其他详细信息。
| 字段 | |
|---|---|
violations[] |
描述所有配额违规情况。 |
违规
用于描述单个配额违规情况的消息类型。例如,超出每日配额或自定义配额。
| 字段 | |
|---|---|
subject |
配额检查失败的主题。例如,“clientip: |
description |
配额检查失败方式的说明。客户端可以使用此说明在服务的公开文档中详细了解配额配置,或通过开发者控制台找到相关配额限制进行调整。 例如:“服务已停用”或“超出读取操作的每日限额”。 |
api_service |
例如,如果调用的 API 是 Kubernetes Engine API (container.googleapis.com),并且 Kubernetes Engine API 本身发生了配额违规,则此字段将为“container.googleapis.com”。另一方面,如果 Kubernetes Engine API 在 Compute Engine API (compute.googleapis.com) 中创建虚拟机时发生配额违规,则此字段将为“compute.googleapis.com”。 |
quota_metric |
违规配额的指标。配额指标是用于衡量用量(例如 API 请求或 CPU)的命名计数器。当服务中发生某项活动(例如虚拟机分配)时,一个或多个配额指标可能会受到影响。 例如,“compute.googleapis.com/cpus_per_vm_family”“storage.googleapis.com/internet_egress_bandwidth”。 |
quota_id |
违规配额的 ID。也称为“限额名称”,是 API 服务上下文中配额的唯一标识符。 例如,“CPUS-PER-VM-FAMILY-per-project-region”。 |
quota_dimensions |
违反的配额的维度。所有非全局配额都会根据一组维度来强制执行。配额指标定义了要统计的内容,而维度则指定了应针对哪些方面增加计数器。 例如,“每个区域每个虚拟机系列的 CPU 数”配额会针对“region”和“vm_family”维度对“compute.googleapis.com/cpus_per_vm_family”指标强制执行限制。如果违规行为发生在“us-central1”区域,并且针对的是“n1”虚拟机系列,则 quota_dimensions 将为: { "region": "us-central1", "vm_family": "n1", } 如果配额是在全球范围内强制执行的,则 quota_dimensions 始终为空。 |
quota_value |
例如,如果 |
future_quota_value |
违规时正在推出的新配额值。发布完成后,系统将强制执行此值,而不是 quota_value。如果违规时没有正在进行的发布,则不会设置此字段。 例如,如果违规时正在进行一项发布,将 CPU 配额从 10 更改为 20,则此字段的值为 20。 |
RequestInfo
包含有关客户端在提交 bug 或提供其他形式的反馈时可以附加的请求的元数据。
| 字段 | |
|---|---|
request_id |
一个不透明的字符串,应仅由生成它的服务进行解释。例如,它可以用于识别服务日志中的请求。 |
serving_data |
用于处理相应请求的所有数据。例如,可以发送回服务提供商以进行调试的加密堆栈轨迹。 |
ResourceInfo
描述正在访问的资源。
| 字段 | |
|---|---|
resource_type |
所访问资源类型的名称,例如“SQL 表”“Cloud Storage 存储分区”“文件”“Google 日历”;或资源的类型网址,例如“type.googleapis.com/google.pubsub.v1.Topic”。 |
resource_name |
所访问资源的名称。例如,如果当前错误为 |
owner |
资源的所有者(可选)。例如,“user: |
description |
描述访问相应资源时遇到的错误。例如,更新云项目可能需要开发者控制台项目的 |
RetryInfo
描述客户端何时可以重试失败的请求。如果错误响应中缺少此信息,客户端可以忽略此建议或重试。
我们始终建议客户端在重试时使用指数退避算法。
客户端应等待自收到错误响应以来经过 retry_delay 时间量后,再进行重试。如果重试请求也失败,客户端应使用指数退避方案,根据 retry_delay 逐渐增加重试之间的延迟,直到达到最大重试次数或最大重试延迟上限。
| 字段 | |
|---|---|
retry_delay |
客户端在重试同一请求时,应至少等待这么长时间。 |
状态
Status 类型定义了适用于不同编程环境(包括 REST API 和 RPC API)的逻辑错误模型。此类型供 gRPC 使用。每条 Status 消息包含三部分数据:错误代码、错误消息和错误详细信息。
如需详细了解该错误模型及其使用方法,请参阅 API 设计指南。
| 字段 | |
|---|---|
code |
状态代码,应为 |
message |
面向开发者的错误消息(应采用英语)。任何向用户显示的错误消息都应进行本地化并通过 |
details[] |
包含错误详细信息的消息列表。有一组通用的消息类型可供 API 使用。 |