問題一覧
1
RESTfulとは?何か。概要とREST原則を6つあげよ
分散型システムにおける設計ルール 1.サーバクライアント 2.ステートレス 3.キャッシュ制御 4.統一インターフェイス 5.階層化システム 6.コードオンデマンド
2
ステートレスなサーバとは何か答えよ(2点)
・サーバがセッション情報などの状態を保持しないという意味 ・クライアントのアプリケーション状態をサーバで管理しない
3
統一インタフェースとは何か答えよ
HTTPメソッドを8つに限定してクライアントとサーバの実装の独立性を向上する
4
URI設計で考慮すること(9点あげる)
・短く入力しやすい(冗長なパスを含まない) ・人が読んで理解できる。できるだけ省略しない ・大文字小文字が混在していない(すべて小文字で表現する) ・単語はハイフンでつなげる(ただしURLのパス等で分割することも検討すべし) ・単語は複数形を利用する ・エンコードを必要とする文字を使わない(要するに日本語を使わない) ・サーバ側のアーキテクチャを使用しない(.php等)は利用しない ・改造しやすいこと(システムの依存の設計をしない) ・ルールが統一されている
5
URI設計において、クエリパラメータとパスパラメータとするかの判断記述を回答せよ
・一意なリソースを表す⇒パスパラメータ ・省略可能かどうか⇒クエリパラメータ
6
HTTPステータスコード1XX番台の「100」及び「101」の意味を回答せよ
100:サーバがリクエストの最初の部分を受け取り、サーバから拒否されていないことを示す 101:プロトコルの切り替え要求を示す
7
HTTPステータスコード2XX番台の「200」及び「201」及び「202」及び「204」の意味を回答せよ
200:リクエストの成功を示す。本文にデータが含まれる。 201:リクエストが成功を示す。ヘッダーのLocationに新しいリソースへのURLを含む 202:非同期ジョブを受け付けたことを示す。実際の処理結果は別途受け取る。 204:リクエストは成功したがレスポンスデータがないことを示す。クライアント側のビューを変更する必要がないことを示す
8
HTTPステータスコード4XX番台の「400」及び「401」及び「403」及び「404」及び「409」及び「429」の意味を回答せよ
400:その他エラー 401:認証されていない 403:リソースに対するアクセスが許可されていないこと(認可されていない) 404:リソースが存在しないことを示す 409:リソースが競合されている 429:アクセス回数が制限回数を超えたため処理不可
9
HTTPステータスコード5XX番台の「500」及び「501」の意味を回答せよ
500:サーバサイドのサプリケーションエラー 501:サーバが使用できない
10
GETメソッド(データ取得するメソッド)を使用したときに成功時(2種類)、失敗時(7種類)のHTTPステータスコードを回答せよ
【成功】 200 OK 304 Not Modified 【失敗】 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 429 Too Many Request 500 Internal Server Error 503 Server UnAvailable
11
POSTメソッドを使用したときに成功時(3種類)、失敗時(7種類)のHTTPステータスコードを回答せよ
【成功】 200 OK 201 Created 202 Accepted 【失敗】 400 Bad Request 401 Unauthorized 403 Forbidden 409 Conflict 429 Too Many Request 500 Internal Server Error 503 Server UnAvailable
12
データ内部構造の設計で考慮することを回答せよ 【ヒント】●●は使用しない
・エンベロープは使用しない(ヘッダー情報と被るので) ※適切なHTTPステータスを返却する
13
データ内部構造の設計で考慮することを回答せよ 【ヒント】●●をサポートする機能を返却
・ページネーションをサポートする情報を返却する ※次をどこから取得するのか。キーとなる情報を返却する
14
データ内部構造の設計で考慮することを回答せよ 【ヒント】●●はフラットにする
JSONのオブジェクトはフラットにする
15
データ内部構造の設計にて日付は何の形式を使うか?
RFC3339(W3C-DTF)
16
APIのバージョンを入れる場所について3か所候補を挙げよ またそのうちどれが一番よく分かれるかも合わせて答えよ
パスに入れる クエリに入れる ヘッダに入れる
17
セマンティックバージョニングに、メジャー、マイナー、パッチはそれぞれどのような 役割を果たすか回答せよ
メジャー:後方互換しない修正 マイナー:後方互換する機能追加 パッチ:後方互換するバグ修正 メジャーバージョンのみ利用するのがおすすめ。 マイナーやパッチを付けてしまうと管理工数がおおい
18
認証と認可の違いを回答せよ
認証は本人特定 認可はアクセス制御
19
OAuthとは何か答えよ
OAuthとは、複数のWebサービスを連携して動作させるために使われる仕組みです。 通常、Webサービスを利用するためは、個別にユーザーIDとパスワードを入力してユーザーを認証する必要がありますが、OAuthを利用することで、IDやパスワードを入力することなく、アプリケーション間の連動ができるのです。
20
OpenID Connectとは何か答えよ
OAuth 2.0 認可プロセスを拡張し, 認証目的で利用できるようにしたもの Authと異なるところはアクセストークンの他IDトークンも返却される(JWTで)
21
レートリミットとは何か回答せよ
API通信における、時間あたりのアクセス制限のこと
22
レールリミットの代表的なアルゴリズム(Fixed Window)とはどのようなものか回答せよ。またその問題点も回答せよ
時間枠を固定にするアクセス制限のこと。とたえば10分に30回のアクセスを許可する場合は、10:00~10:30で30回、10:30~10:40で30回と定義する 問題点はFixed Windowの境界付近で大量のアクセスが来ると時間帯でみると実質的に2倍のアクセスを許容することになる
23
レールリミットの代表的なアルゴリズム(Sliding log)とはどのようなものか回答せよ。またその問題点も回答せよ
過去N分間のログの件数でカウントして、その件数でカウントする 問題点は過去ログを大量に保存する必要がある。
24
レールリミットの代表的なアルゴリズム(Sliding window)とはどのようなものか回答せよ。またその問題点も回答せよ
Sliding logとFixed Windowのいいところどり リクエストがあった過去M分間の比率を算出する Sliding logとFixed Windowのいいところどり ※画像参照。値をイメージするとわかりやすい
25
WebAPIにおける脆弱性「XSS」とは何か?またその対策を述べよ
悪意あるユーザが正規のサイトに不正なスクリプトを挿入することで、正規ユーザの情報を不正に引き出したりする 【対策】 レスポンスヘッダー追加
26
WebAPIにおける脆弱性「CSRF」とは何か?またその対策を述べよ
本来拒否しなければならないアクセス元(許可しないアクセス元)からくるリクエストを処理してしまう問題 【詳細】 悪意あるユーザがトラップサイトを作成 善良なユーザをトラップサイトに誘導 トラップサイトから正規のサイトにリクエスト 【対策】 許可しないアクセス元からリクエストの拒否(X-API-KeyやAuthentiation(ユーザ単位)で実行可否判断) 攻撃者に推測されにくいトークンの発行
27
SSL/TLS/HTTPSの違いを述べよ
SSL…安全に通信を行うためのプロトコル(2015年廃止) TLS…安全に通信を行うためのプロトコル(SSLの後継) HTTPS…HTTP+SSL/TLS