はじめに
現代のWeb開発において、REST APIはフロントエンドとバックエンドを繋ぐ重要な基盤です。Googleでは、YouTubeやGoogle Cloudなどの大規模プロダクトで、何十万ものAPIエンドポイントが日々稼働しています。本記事では、Googleの内部標準に基づく**「スケーラブルで保守性の高いREST API設計」**のベストプラクティスを余すところなく解説します。
1. リソース設計の黄金律
URIは名詞、HTTPメソッドは動詞で
✅ 良い例:
GET /users/{id}
POST /users
PUT /users/{id}
DELETE /users/{id}
❌ 悪い例:
GET /getUser
POST /createUser
Google流の命名規則
- 複数形の名詞を使用(
/users
ではなく/users
) - 単語間はハイフン(
/user-profiles
) - バージョニングはURIに埋め込み(
/v1/users
)
2. HTTPステータスコードの正しい使い方
GoogleのAPIガイドラインでは、**「クライアントが処理を決定できる明確なステータス」**を要求します。
コード | 用途 |
---|---|
200 | 成功(GET/PUT/DELETE) |
201 | 作成成功(POST) |
204 | コンテンツなし(DELETE成功時) |
400 | クライアント側の不正なリクエスト |
429 | レートリミット超過 |
実例:エラーレスポンス
{
"error": {
"code": 400,
"message": "Invalid parameter: 'email'",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "email",
"description": "Must be a valid email address"
}
]
}
]
}
}
3. バージョニング戦略
GoogleのAPIでは、**「後方互換性を保証する」**ことが最優先事項です。
3つのアプローチ
-
URIパス(
/v1/users
)- 最も一般的(Google Cloud APIで採用)
-
クエリパラメータ(
/users?version=1
)- 簡易的な変更向け
-
ヘッダー(
Accept: application/vnd.google.v1+json
)- マイクロサービス向け
4. セキュリティ対策
Googleのプロダクトで必須とされる対策:
必須項目
- HTTPSの強制(HSTSプリロード推奨)
- OAuth 2.0(Google Identity Platform連携)
- レートリミット(Cloud Endpointsでの自動適用)
追加推奨
# セキュリティヘッダー例
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
5. パフォーマンス最適化
Googleのベンチマークデータに基づくTips
-
ページネーション:
limit
とoffset
よりカーソルベースを推奨GET /users?page_token=abc123&page_size=50
-
部分レスポンス:
fields
パラメータで必要なデータのみ取得GET /users/123?fields=name,email
-
キャッシュ制御: CDN連携が可能な設計
Cache-Control: public, max-age=3600
6. ドキュメントの重要性
Googleでは、**「API仕様書はプロダクトの一部」**とみなします。
OpenAPI(Swagger)活用例
paths:
/users/{id}:
get:
summary: "ユーザー情報取得"
parameters:
- name: "id"
in: path
required: true
schema: { type: "string" }
responses:
'200':
description: "成功"
content:
application/json:
schema:
$ref: "#/components/schemas/User"
おわりに
優れたAPI設計は、「10年後も変更に耐える」ことを目指すべきです。Googleでは、APIのライフサイクル管理(設計→実装→廃止)までを一貫した基準で運用しています。
次回は、**「GraphQLを使うべき3つの理由と実装ガイド」**を解説予定です!
「実際のプロジェクトで悩んでいる設計課題があれば、コメントで共有してください!」 🚀