クイズの説明
L2 Month 2 の全範囲から出題される卒業クイズです。
- 全15問
- 合格ライン: 80%(12問正解)
- 不合格の場合は関連ステップを復習してから再挑戦してください
問題
Q1. RESTにおけるリソースのURL設計として最も適切なものはどれですか?
- A)
POST /api/v1/createUser - B)
GET /api/v1/users/123 - C)
GET /api/v1/user/get?id=123 - D)
POST /api/v1/data?type=user&action=get&id=123
答えを見る
正解: B
RESTでは、URLは「名詞・複数形」でリソースを表し、操作はHTTPメソッドで表現します。
- A: URLに動詞が含まれている
- B: 適切(GET + 名詞・複数形 + ID)
- C: 単数形、クエリパラメータで操作を指定
- D: 実質的にRPCスタイル
Q2. HTTPメソッドの中で「安全」かつ「冪等」なのはどれですか?
- A) POST
- B) PUT
- C) GET
- D) DELETE
答えを見る
正解: C
| メソッド | 安全性 | 冪等性 |
|---|---|---|
| GET | 安全 | 冪等 |
| POST | 非安全 | 非冪等 |
| PUT | 非安全 | 冪等 |
| DELETE | 非安全 | 冪等 |
安全性: サーバーの状態を変更しない 冪等性: 同じ操作を何度実行しても結果が同じ
GETは唯一、安全かつ冪等なメソッドです。
Q3. APIのレスポンスで日付を返す場合、最も推奨される形式はどれですか?
- A)
"2025/01/15 09:00" - B)
"2025-01-15T09:00:00Z" - C)
1705305600 - D)
"January 15, 2025"
答えを見る
正解: B
ISO 8601形式(2025-01-15T09:00:00Z)が最も推奨されます。国際標準であり、タイムゾーン情報を含み、ほぼすべてのプログラミング言語でパース可能です。
Q4. OpenAPIの $ref: "#/components/schemas/User" は何をしていますか?
- A) User テーブルからデータを取得している
- B) components/schemas に定義された User スキーマを参照・再利用している
- C) User クラスのインスタンスを生成している
- D) 外部のAPIからUserデータを取得している
答えを見る
正解: B
$ref はJSON Referenceの構文で、OpenAPIの components セクションに定義されたスキーマを参照するために使用します。同じスキーマ定義を複数の場所から再利用でき、重複を排除します。
Q5. 仕様ファースト開発でモックサーバーを使う理由はどれですか?
- A) 本番環境のテストのため
- B) バックエンドの実装前にフロントエンドが開発を開始するため
- C) データベースの負荷テストのため
- D) APIのセキュリティテストのため
答えを見る
正解: B
仕様ファースト開発では、OpenAPI仕様書を先に作成します。モックサーバー(Prism等)は仕様書のexampleデータに基づいてレスポンスを返すため、バックエンドの実装を待たずにフロントエンド開発を開始できます。
Q6. GraphQLの最大の利点はどれですか?
- A) HTTPキャッシュが効きやすい
- B) クライアントが必要なフィールドだけを指定して取得できる
- C) サーバーの実装が簡単になる
- D) 認証が自動的に行われる
答えを見る
正解: B
GraphQLでは、クライアントがクエリで必要なフィールドを指定するため、Over-fetching(不要なデータの取得)とUnder-fetching(データ不足による追加リクエスト)の問題を解決できます。
Q7. DataLoaderを使う主な理由はどれですか?
- A) GraphQLのスキーマを自動生成するため
- B) N+1問題を解決し、複数のDB問い合わせをバッチ処理するため
- C) GraphQLのSubscriptionを実装するため
- D) APIの認証を行うため
答えを見る
正解: B
DataLoaderは、GraphQLのフィールドリゾルバーで発生するN+1問題を解決します。同一イベントループ内の複数のload()呼び出しを集約し、1回のバッチクエリ(WHERE id IN (...))にまとめることで、DBクエリ数を大幅に削減します。
Q8. OAuth 2.0が最も適している場面はどれですか?
- A) サーバー間の内部通信
- B) サードパーティアプリケーションがユーザーの代わりにAPIにアクセスする場面
- C) 単純なAPIキー認証が必要な場面
- D) WebSocketの認証
答えを見る
正解: B
OAuth 2.0は、ユーザーが自分のパスワードをサードパーティに渡すことなく、限定された権限(スコープ)でAPIへのアクセスを許可するための認可フレームワークです。Google、GitHub、Twitter等のサードパーティ連携で広く使用されています。
Q9. レート制限で 429 Too Many Requests を返す際に、クライアントが最も必要とするヘッダーはどれですか?
- A)
Content-Type - B)
Retry-After - C)
Cache-Control - D)
Authorization
答えを見る
正解: B
Retry-After ヘッダーは、クライアントに再試行可能になるまでの時間(秒)を伝えます。このヘッダーにより、クライアントは適切なタイミングでリトライを行うことができます。
Q10. リチャードソン成熟度モデルの Level 3 の特徴はどれですか?
- A) リソースごとにURLを分ける
- B) HTTPメソッドを正しく使い分ける
- C) レスポンスにハイパーメディアリンクを含める(HATEOAS)
- D) 単一のURLですべての操作を行う
答えを見る
正解: C
Level 3 はHATEOAS(Hypermedia As The Engine Of Application State)で、レスポンスに「次にできる操作」のリンクを含めます。クライアントはURLをハードコードする必要がなく、リンクをたどって操作を発見できます。
Q11. APIバージョニングで、GraphQLが採用するアプローチはどれですか?
- A) URIバージョニング
- B) ヘッダーバージョニング
- C) バージョニングせず、@deprecated で段階的に移行する
- D) クエリパラメータバージョニング
答えを見る
正解: C
GraphQLではバージョニングを行わず、フィールドの追加・廃止で進化させます。
- 新しいフィールドを追加(既存クエリに影響なし)
- 古いフィールドに
@deprecatedディレクティブを付ける - 利用状況を監視し、使われなくなったら削除
Q12. Expand/Contract パターンの「Expand」フェーズで行うことはどれですか?
- A) 古いフィールドを削除する
- B) 新しいフィールドを追加し、古いフィールドも残す
- C) クライアントに移行を強制する
- D) APIのバージョンを上げる
答えを見る
正解: B
Expand(拡張)フェーズでは、新しいフィールドを追加しつつ、古いフィールドもそのまま残します。これにより、既存のクライアントは古いフィールドを使い続けることができ、新しいクライアントは新しいフィールドを使用できます。
Q13. BFF(Backend for Frontend)を導入すべき最も強い理由はどれですか?
- A) サーバーの台数を増やすため
- B) 異なるクライアント(Web、モバイル、IoT)が必要とするデータ構造が大きく異なるため
- C) データベースのスケーラビリティを向上させるため
- D) APIのセキュリティを強化するため
答えを見る
正解: B
BFFは、クライアントの種類ごとに最適化されたAPIを提供するパターンです。Webアプリは豊富なデータを必要とし、モバイルアプリは帯域節約のために最小限のデータが必要、IoTデバイスは極小のペイロードが必要など、異なる要件に対応します。
Q14. API廃止時にSunsetヘッダーで伝える情報はどれですか?
- A) APIの作成日
- B) APIが利用不可になる日付
- C) APIの最新バージョン番号
- D) APIの利用料金
答えを見る
正解: B
Sunset ヘッダー(RFC 8594)は、APIが利用不可になる日付をクライアントに通知します。
例: Sunset: Sat, 31 Dec 2025 23:59:59 GMT
Q15. 以下の場面でRESTとGraphQLのどちらを選ぶべきですか?「外部開発者向けの公開APIを設計する場合」
- A) GraphQL
- B) REST
- C) gRPC
- D) WebSocket
答えを見る
正解: B
外部開発者向けの公開APIにはRESTが最も適しています。
- HTTP標準に基づいているため、学習コストが低い
- HTTPキャッシュ(CDN)が効きやすい
- curlやブラウザで簡単にテストできる
- 多くの開発者がRESTに慣れている
GraphQLは自社のフロントエンド向けに、gRPCはマイクロサービス間通信に適しています。
結果
12問以上正解の場合
合格です。おめでとうございます。
================================
L2 Month 2 修了証明書
API設計マスター
認定スキル:
- REST API設計
- OpenAPI Specification
- GraphQL
- APIバージョニング
修了日: ____年__月__日
================================
あなたは「API設計者」の称号を得ました。
習得したスキル
| スキル | レベル |
|---|---|
| REST API設計 | RESTful なエンドポイント、認証、レート制限を設計できる |
| OpenAPI | 仕様書を作成し、コード生成・ドキュメント自動化ができる |
| GraphQL | スキーマ設計、N+1問題の解決、RESTとの使い分けができる |
| バージョニング | 後方互換性を維持しつつ、APIを進化させる計画が立てられる |
11問以下の場合
もう少し復習が必要です。
| 問題 | 復習ステップ |
|---|---|
| Q1, Q2, Q3 | Step 1: API設計入門 |
| Q4, Q5 | Step 3: OpenAPI |
| Q6, Q7 | Step 4: GraphQL |
| Q8, Q9, Q10 | Step 2: RESTful設計の深淵 |
| Q11, Q12, Q13, Q14 | Step 5: バージョニングと進化戦略 |
| Q15 | Step 4: REST vs GraphQL |
L2 Month 2 完了
お疲れさまでした。
学んだこと
| Step | テーマ | 主なスキル |
|---|---|---|
| Step 1 | API設計入門 | REST基礎、ベストプラクティス、エラー設計 |
| Step 2 | RESTful設計の深淵 | リソース設計、HATEOAS、認証、レート制限 |
| Step 3 | OpenAPI | 仕様書作成、コード生成、仕様ファースト開発 |
| Step 4 | GraphQL | Query/Mutation、スキーマ設計、DataLoader |
| Step 5 | バージョニング | 後方互換性、廃止戦略、API Gateway、BFF |
| Step 6 | 最終試験 | 総合演習 + 卒業クイズ |
次のミッション
L2 Month 3 では、さらに高度な設計スキルに挑戦します。
API設計者として、次のステージへ進みましょう。
推定所要時間: 30分