Datastore モードの Firestore のリクエストに成功すると、API はリクエストされたデータと HTTP 200 OK
ステータス コードをレスポンスの本文で返します。
リクエストが失敗すると、Datastore API は失敗の概要を表す 4xx
または 5xx
ステータス コードと、失敗の原因となったエラーの詳細情報を含むレスポンスを返します。
このページの残りの部分では、エラーの構造について説明し、具体的なエラーコードを列挙します。また、推奨される対処方法も示します。
JSON リクエストのエラー レスポンスの構造は次のとおりです。
{
"error": {
"code": "integer",
"message": "string",
"status": "string"
}
}
レスポンス オブジェクトには単一のフィールド error
が格納されており、その値には次の要素が格納されています。
要素 | 説明 |
---|---|
code |
リクエストの失敗をおおまかに識別する HTTP ステータス コード |
message |
リクエストの失敗に関する具体的な情報 |
status |
Google API の標準的なエラーコード(google.rpc.Code )。Datastore API から返されるコードについては、エラーコードをご覧ください。 |
次に、JSON リクエストに対するエラー レスポンスの例を示します。
{
"error": {
"code": 400,
"message": "Key path is incomplete: [Person: null]",
"status": "INVALID_ARGUMENT"
}
}
コンテンツ タイプが application/x-protobuf
のリクエストがエラーになると、シリアライズされた google.rpc.Status
メッセージがペイロードとして返されます。
エラーコード
エラーの分類におすすめする方法は、標準的なエラーコード(google.rpc.Code
)の値を調べることです。JSON エラーの場合、このコードは status
フィールドに表示されます。application/x-protobuf
エラーでは、code
フィールドに表示されます。
標準的なエラーコード | 説明 | 推奨される対応 |
---|---|---|
ABORTED |
リクエストが別のリクエストと競合していることを示します。 | 非トランザクション commit の場合: リクエストを再試行するか、競合がなくなるようにエンティティを構築します。 トランザクション commit に含まれるリクエスト: トランザクション全体を再試行するか、競合がなくなるようにエンティティを構築します。 |
ALREADY_EXISTS |
リクエストが既存のエンティティを挿入しようとしていることを示します。 | 問題を解決してから再試行します。 |
DEADLINE_EXCEEDED |
サーバーでの期限を超過しました。 | 指数バックオフを使用して再試行します。 |
FAILED_PRECONDITION |
リクエストの前提条件が満たされていなかったことを示します。エラー レスポンスのメッセージ フィールドで、失敗した前提条件に関する情報が提供されます。考えられる原因の 1 つとして、クエリが未定義のインデックスを必要としていることが挙げられます。 | 問題を解決してから再試行します。 |
INTERNAL |
サーバーがエラーを返しました。 | このリクエストを複数回再試行しないでください。 |
INVALID_ARGUMENT |
リクエストのパラメータに無効な値があることを示します。エラー レスポンスのメッセージ フィールドで、無効であった値を特定する情報が提供されます。 | 問題を解決してから再試行します。 |
NOT_FOUND |
リクエストが存在しないエンティティを更新しようとしていることを示します。 | 問題を解決してから再試行します。 |
PERMISSION_DENIED |
ユーザーがリクエストの実行を承認されなかったことを示します。 | 問題を解決してから再試行します。 |
RESOURCE_EXHAUSTED |
プロジェクトが割り当てを超えているか、リージョンまたはマルチリージョンの容量を超えていることを示しています。 | プロジェクトの割り当てを超えていないことを確認します。プロジェクトの割り当てを超えている場合は、問題を解決せずに再試行しないでください。 そうでない場合は、指数バックオフで再試行します。 |
UNAUTHENTICATED |
リクエストに有効な認証情報がなかったことを示します。 | 問題を解決してから再試行します。 |
UNAVAILABLE |
サーバーがエラーを返しました。 | 指数バックオフを使用して再試行します。 |