はじめに
ググった情報を寄せ集めて、(自分に)分かりやすいようにざっくりまとめたものです。
レベル1とか2とか言われてもよく分からないな~と思っていたので、調べました。
REST とは?
- 2000年にロイ・フィールディングが提唱したWebサービスを作るときの設計原則
- 4つの項目から構成される
-
- ステートレス
- セッションなどの状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができる
-
- 統一インターフェース
- 情報を操作する命令の体系が予め定義・共有されている
- 例)JSON形式でGET,POST,DELETE,PUTのHTTPメソッドを使用することなど
-
- アドレス可能性
- すべての情報は汎用的な構文で一意なURIで識別される
-
- 接続性
- 情報の一部として、別の状態や別の情報への参照(ハイパーリンク)を含めることができる
-
成熟度モデルとは?
- 2008年にレオナルド・リチャードソンによって提唱された
- RESTに準拠して開発する場合、どのように改善すればより成熟するか分かる指標
- Level 0:Plain Old XML(昔ながらの単純にXMLを返すやり方) - Level 1:URLでリソースを表すようにする(リソースを動詞でなく名詞で表す) - Level 2:HTTPメソッドGET, POST, PUT, DELETE等を正しく使い分ける - Level 3:レスポンスの中に関連するリンクを含める
レベル0
- 1つのURIに対して、POSTリクエストを送信することですべての機能を実行
- URLを使っているが中身はただのXML
- XML-PRC や SOAP が該当する
レベル1
- URIが機能ごとに別れている
- しかしHTTPメソッドは1つ
- FlickrやAmazonのS3,ECSが該当する
- Railsも以前は該当していたが修正された
レベル2
- HTTPメソッドを正しく使い分ける
- 多くのサービスがこのレベルに該当している
HTTPメソッド | 用途 | CRUD |
---|---|---|
GET | データの取得 | READ |
POST | データの新規作成 | CREATE |
PUT | データの更新 | UPDATE |
DELETE | データの削除 | DELETE |
例:ユーザー情報を操作するAPI
GET
- URL:
/users/1
- IDが1のユーザー情報を取得できる
POST
- URL:
/users
- リクエストボディなどにユーザー情報を作成するために必要な情報を送信する
PUT
- URL:
/users/1
- 登録されているIDが1のユーザー情報を更新する
- IDが1のユーザーとしてログインしていないときは更新できないようにする
DELETE
- URL:
/users/1
- 登録されているIDが1のユーザー情報を削除する
- IDが1のユーザーとしてログインしていないときは削除できないようにする
レベル3
- APIのレスポンスに関連するハイパーリンクを持つ
- HATEOAS(Hypermedia As the Engine Of Application State)ともいう
- URIスキームの事前知識を必要とせずに、リソースのセット全体を移動できる
- 各HTTP GET要求は応答に含まれるハイパーリンクより、要求したオブジェクトに直接関連するリソースを検索するのに必要な情報を返し、これらの各リソースで使用可能な操作を記述する情報も提供
どういうことかECサイトを例にすると…
- 購入履歴を返すとAPIがあるとする
- もしまだキャンセルできる商品の場合は、キャンセルのリンクをレスポンスに含む
- キャンセルできない場合は、リンクをレスポンスに含まない
- 出来ることのみ表現 = 事前知識を必要をせずに移動できる
終わりに
間違いがあったら教えていただけるとありがたいです。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus) が良さそうな書籍だったので、後日購入して読んでみようと思います。