こう 聞かれます
- 「REST API とは
何か、 説明してください」 - 「投稿の
一覧、 1 件の 取得、 作成、 更新、 削除の API を 作るなら、 URL と メソッドを どう 決めますか」 - 「作った
アプリの API は どんな 形でしたか」 (作った 物から、 設計の 考え方を 確かめる形)
面接官が 見ている点
- 「JSON を
返す API」で 止めず、 資源、 メソッド、 ステータスの 3 つで 説明できるか - URL に
動詞を 入れず、 名詞の 資源で 組み立てられるか - 自分の
作った API を、 その 物差しで 説明し直せるか
短い答え
- REST API は、
扱う 物 (資源) を /posts/42のような URL で表し、 HTTP の メソッドで 操作を 決める API の 作り方です。 - 取るのは GET、
作るのは POST、 置き換えるのは PUT、 一部を 直すのは PATCH、 消すのは DELETE と、 同じ URL に メソッドを 変えて 頼みます。 - 結果は
ステータスコードで 伝え、 中身は 多くの 場合 JSON で 返します。
少し 詳しい答え
資源と URL
URL は
GET /posts 一覧
POST /posts 作る
GET /posts/42 1 件
PATCH /posts/42 一部を直す
DELETE /posts/42 消す/getPosts や /deletePost?id=42 のように URL に
結果は ステータスコードで
作れたら 201、
ステートレス
REST の
作った/posts と /posts/:id の 2 つの URL に
よく ある間違い
- 「REST API は JSON を
返す API の こと」と言う JSON は よく 使う 形というだけです。 芯は、 資源を URL で 表し、 操作を メソッドで 分けることです - URL に
動詞を入れる /createUserのような形は、 メソッドと 役目が 重なります。 POST /usersで同じ ことを表せます - 何が
起きても 200 を返す失敗を 本文にだけ書くと、 呼ぶ側が 番号で 成否を 分けられません
深掘りの問い
- 「PUT と PATCH の
違いは 何ですか」 PUT は 資源を 丸ごと 置き換え、 PATCH は 一部だけを 直す、と 答えます。 PUT は 何度送っても 結果が 同じ (冪等) である 点も添えます - 「投稿に
付いた コメントの 一覧は、 どんな URL にしますか」 /posts/42/commentsのように、親の 資源の 下に 置く 形を挙げます - 「API の
形を 変える とき、 今の 利用者を 壊さないためには」 /v2/のように版を 分ける、 項目は 足すだけに して 消さない、などを挙げます