WebサービスやアプリのAPI開発では、HTTPの基本ルールから認証、データ形式、キャッシュの仕組みまで、押さえておきたい知識が幅広くあります。このクイズでは、日々の開発やAPI連携で役立つ考え方を10問にまとめました。すでに実務で使っている方は知識の再確認に、これから学ぶ方は理解度のチェックにご活用ください。気軽に挑戦してみましょう。
Q1 : HTTPレスポンスヘッダーのうち、リソースの特定のバージョンを識別し、条件付きリクエストによるキャッシュの検証に使われるものはどれですか? Accept ETag Host Origin
ETagは、リソースの特定のバージョンを識別するための値で、サーバーがレスポンスヘッダーに付与します。クライアントは次回のリクエスト時にIf-None-Matchヘッダーでその値を送り、リソースが変更されていなければサーバーは304 Not Modifiedを返します。これにより本文の再送を省けて、通信量を減らせます。Acceptは受け入れ可能な形式、Hostは宛先ホスト、Originはリクエスト元を示すヘッダーです。
Q2 : GraphQLにおいて、サーバー上のデータを作成・更新・削除するなど、変更を伴う操作に用いるオペレーションの種類はどれですか? Query Subscription Fragment Mutation
GraphQLの主なオペレーションはQuery、Mutation、Subscriptionの3種類です。Queryはデータの取得、Mutationはデータの作成・更新・削除といった変更操作、Subscriptionはサーバーからのリアルタイムな通知の受信に使われます。Fragmentは複数のクエリで再利用できるフィールドの集まりを定義する仕組みであり、オペレーションの種類ではありません。REST APIのPOSTやPUTなどに近い役割をMutationが担います。
Q3 : ブラウザがCORSの仕組みで、実際のリクエストの前に送信可否を確認するために自動送信するプリフライトリクエストのHTTPメソッドはどれですか? GET HEAD OPTIONS TRACE
CORS(Cross-Origin Resource Sharing)では、異なるオリジンへ、PUTやDELETEの利用、独自ヘッダーの付与、application/jsonなどのContent-Typeを伴うリクエストを送る際、ブラウザが事前にOPTIONSメソッドでプリフライトリクエストを送信します。サーバーはAccess-Control-Allow-Originなどのヘッダーで許可する内容を返し、ブラウザはその結果を見て本来のリクエストを送るかどうかを判断します。
Q4 : 短時間にリクエストを送りすぎたクライアントに対し、レート制限を理由として返されるHTTPステータスコードはどれですか? 429 Too Many Requests 408 Request Timeout 405 Method Not Allowed 502 Bad Gateway
429 Too Many Requestsは、一定時間内に送信できるリクエスト数の上限を超えたときに返されるステータスコードで、RFC 6585で定義されています。多くのAPIでは、Retry-Afterヘッダーで再試行可能になるまでの待ち時間を知らせます。408は、サーバーがリクエストの受信を待ちきれなかった場合、405は許可されていないメソッドを使った場合、502は上流サーバーから不正な応答を受けた場合を表し、レート制限とは異なります。
Q5 : OpenAPI Specification(OAS)は、かつて何という名称で知られていましたか? RAML WSDL Postman Collection Swagger Specification
OpenAPI Specificationは、REST APIの仕様をYAMLやJSONで記述するための標準規格で、もともとはSwagger Specificationと呼ばれていました。2015年にSmartBear社がこの仕様をLinux Foundation傘下のOpenAPI Initiativeへ寄贈し、名称がOpenAPI Specificationに変わりました。現在もSwagger UIなどのツール名として Swagger の名は残っています。RAMLやWSDLは別の記述形式です。
Q6 : HTTPで新しいリソースの作成に成功したことを示すステータスコードはどれですか? 200 201 204 301
201 Createdは、リクエストが成功し、その結果として新しいリソースが作成されたことを示すステータスコードです。主にPOSTリクエストでリソースを新規作成した際に返され、通常はLocationヘッダーで作成されたリソースのURLが示されます。200 OKは一般的な成功、204 No Contentは成功したが返す本文がない場合、301 Moved Permanentlyは恒久的なリダイレクトを表し、いずれもリソース作成を意味しません。
Q7 : REST APIでリソースの一部の項目だけを更新したいとき、一般的に用いられるHTTPメソッドはどれですか? GET HEAD OPTIONS PATCH
PATCHメソッドは、リソースに対する部分的な変更を適用するために定義されており、RFC 5789で標準化されています。PUTがリソース全体を置き換える用途で使われるのに対し、PATCHは変更したい項目だけを送れるため、通信量を抑えられます。GETは取得、HEADはヘッダーのみの取得、OPTIONSは対応メソッドや通信オプションの確認に使われ、いずれも更新のためのメソッドではありません。
Q8 : HTTPの主要メソッドのうち、同じリクエストを複数回送っても結果が同じになる性質(冪等性)を持たないのはどれですか? POST PUT DELETE GET
POSTは新規リソースの作成や処理の実行に使われ、同じリクエストを複数回送ると、リソースが複数作られるなど結果が変わる可能性があるため冪等ではありません。一方、PUTは同じ内容で何度置き換えても最終状態が同じで、DELETEも一度削除すれば以降は削除済みの状態が続き、GETは取得のみで状態を変えないため、いずれも冪等とされています。決済APIなどでは二重送信を防ぐため、冪等キーが併用されることもあります。
Q9 : JWT(JSON Web Token)を構成する3つの要素の組み合わせとして正しいものはどれですか? ヘッダー・ボディ・フッター ID・パスワード・ソルト ヘッダー・ペイロード・署名 公開鍵・秘密鍵・証明書
JWTは、ヘッダー(署名アルゴリズムなどのメタ情報)、ペイロード(クレームと呼ばれる利用者情報や有効期限などのデータ)、署名(改ざん検知用)の3つをそれぞれBase64URLでエンコードし、ピリオドでつないだ文字列です。署名により、内容が途中で改ざんされていないかを検証できます。ただしペイロードは暗号化されておらず誰でも読めるため、パスワードなどの機密情報を入れてはいけません。
Q10 : リクエストに有効な認証情報が含まれていない、または認証情報が無効な場合に返すのが適切なHTTPステータスコードはどれですか? 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found
401 Unauthorizedは、認証が必要なリソースに対して認証情報がない、あるいは無効であるときに返されます。名称は Unauthorized ですが、実際には認証(Authentication)の失敗を意味します。これに対し403 Forbiddenは、認証済みであっても権限がなくアクセスが許可されない場合に使われます。400は構文などリクエスト自体の不備、404は対象リソースが見つからない場合を表し、認証失敗の意味では使いません。
まとめ
いかがでしたか? 今回はAPIクイズをお送りしました。
皆さんは何問正解できましたか?
今回はAPIクイズを出題しました。
ぜひ、ほかのクイズにも挑戦してみてください!
次回のクイズもお楽しみに。