LoginSignup
3
0

More than 1 year has passed since last update.

RESTと成熟度モデルのレベルを大まかに理解する

Posted at

はじめに

ググった情報を寄せ集めて、(自分に)分かりやすいようにざっくりまとめたものです。
レベル1とか2とか言われてもよく分からないな~と思っていたので、調べました。

REST とは?

  • 2000年にロイ・フィールディングが提唱したWebサービスを作るときの設計原則
  • 4つの項目から構成される
    • 1. ステートレス
      • セッションなどの状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができる
    • 2. 統一インターフェース
      • 情報を操作する命令の体系が予め定義・共有されている
      • 例)JSON形式でGET,POST,DELETE,PUTのHTTPメソッドを使用することなど
    • 3. アドレス可能性
      • すべての情報は汎用的な構文で一意なURIで識別される
    • 4. 接続性
      • 情報の一部として、別の状態や別の情報への参照(ハイパーリンク)を含めることができる

成熟度モデルとは?

  • 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) が良さそうな書籍だったので、後日購入して読んでみようと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0