QUIZ 30分

クイズの説明

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ではバージョニングを行わず、フィールドの追加・廃止で進化させます。

  1. 新しいフィールドを追加(既存クエリに影響なし)
  2. 古いフィールドに @deprecated ディレクティブを付ける
  3. 利用状況を監視し、使われなくなったら削除

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, Q3Step 1: API設計入門
Q4, Q5Step 3: OpenAPI
Q6, Q7Step 4: GraphQL
Q8, Q9, Q10Step 2: RESTful設計の深淵
Q11, Q12, Q13, Q14Step 5: バージョニングと進化戦略
Q15Step 4: REST vs GraphQL

L2 Month 2 完了

お疲れさまでした。

学んだこと

Stepテーマ主なスキル
Step 1API設計入門REST基礎、ベストプラクティス、エラー設計
Step 2RESTful設計の深淵リソース設計、HATEOAS、認証、レート制限
Step 3OpenAPI仕様書作成、コード生成、仕様ファースト開発
Step 4GraphQLQuery/Mutation、スキーマ設計、DataLoader
Step 5バージョニング後方互換性、廃止戦略、API Gateway、BFF
Step 6最終試験総合演習 + 卒業クイズ

次のミッション

L2 Month 3 では、さらに高度な設計スキルに挑戦します。

API設計者として、次のステージへ進みましょう。


推定所要時間: 30分