search
LoginSignup
0

More than 1 year has passed since last update.

posted at

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

はじめに

ググった情報を寄せ集めて、(自分に)分かりやすいようにざっくりまとめたものです。
レベル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) が良さそうな書籍だったので、後日購入して読んでみようと思います。

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
What you can do with signing up
0