はじめに
Google Cloud Endpointsを使うと、サーバーのうちOpenAPI形式で書いた通りのAPIのみを公開することができます。
Cloud Endpointsの層で不正なリクエストと判定された場合には、指定のフォーマットでレスポンスが返ってくるようで、種類がいくつかあったので自分が遭遇したエラーをまとめました。
見た目を変えたい場合は、以下のレスポンスを参考にフロントの制御を行うとよいかと思います。
※ なお、裏側のサーバーはGoogle App Engineで作っているため、別のサービスで作った場合はまた別のレスポンス形式になるかもしれません。
エンドポイント未定義の場合
ドキュメントに書かれていないエンドポイントを叩いた場合に発生します。
{
"code": 5,
"message": "Method does not exist.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "service_control"
}
]
}
APIキーがない場合
Cloud Endpointsでは認証方式としてAPIキーを設定でき、APIキーが含まれていないリクエストが来ると以下のレスポンスを返すようです。
{
"code": 16,
"message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "service_control"
}
]
}
APIキーが間違っている場合
こちらは認証失敗時のエラーです。
{
"code": 3,
"message": "API key not valid. Please pass a valid API key.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "service_control"
}
]
}
APIキーの権限がない場合
Cloud Endpointsのサービスに対してAPIのキーの権限がない場合に出るようです。
{
"code": 13,
"message": "Request blocked due to unsupported error code: 122",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "service_control"
}
]
}
GCPの「APIとサービス」の機能でAPIキーを発行した際、APIキーの制限を設定する箇所でCloud Endpointsが接続するバックエンド(今回はApp Engine)に対して権限がないと発生するようです。
この場合はAPIの制限に対して、バックエンドとなるサービスを追加することで解決できるようになるようです。

まとめ
ということでCloud Endpointsのエラーレスポンスのまとめでした。
いろいろあってCloud Endpointをサービスで使わないことにはなったのですが、今後も検証していく予定ではあるので新たなエラーを見つけたら更新したいと思います。