Restful制約
No | 項目 | 概要 | メリット・デメリット |
---|---|---|---|
1 | nullスタート | - REST原則のみで成立。他の原則、設計思想とは独立 | |
2 | クライアント/サーバー | - 画面(UI)とデータで作業や役割を分離できる。 - クライアント側がトリガー、サーバー側は受け身。 (最近はサーバー側もPushするケースはある) |
|
3 | ステートレス | - サーバーはリクエストだけでコンテキストを理解できる - サーバーに保存されたコンテキスト情報は使わない(サーバーセッションは使わない) - 状態はクライアント上に保存される(リクエストにすべて含める) - リクエストに状態情報を含むことでリクエストが独立する |
【メリット】 - 単一のリクエスト以外見る必要がないので、監視が容易にできる - 障害発生したリクエストだけ回復すればよいので、障害復旧が容易。 - リクエスト全体でサーバーリソースを共有する日宇洋画ないので、スケールが容易 【デメリット】 - 単一のリクエストで完結させるため、リクエストデータに重複がある。 - アプリを複数バージョン同時提供し、状態をクライアントにおいておくとアプリ制御が複雑になる |
4 | キャッシュ制御 | - クライアントはレス本をキャッシュでくる - レスポンスは明示的または暗黙的にキャッシュ可能 - キャッシュを適切におこなうことで必要な情報だけリクエストすればよくなる - キャッシュを適切に行うことでクライアント/サーバー間の通信が排除され、ユーザー体験の向上、リソース効率の向上、拡張性の向上が見込める。 |
【メリット】 - ユーザー体験の向上 - リソース効率の向上 - 拡張性の向上 【デメリット】 - 古いデータを戻してしまうとシステムに対する信頼性の低下につながる |
5 | 統一インターフェース | 5-1)リソースの識別 - 名前が付けられるあらゆるもの。(ドキュメント、画像、情報、サービス、状態など) - サーバー側に保持されるデータ - URIを用いてサーバーに保存されたデータを識別する - URIに動作は含まない 5-2)表現を用いたリソース操作 - リソース(サーバーに保持されたデータ)のある断面。クライアントへ返されるレスポンスやサーバーやサーバーへのPOSTするデータ。 断面情報を利用してサーバー上のデータを操作する。 例)クライアントからサーバーへ編集リクエストをする際に、認証情報などの追加情報を付与する 5-3)自己記述メッセージ - データ自身がデータの中身を説明している - サーバーへのリクエストするデータ、クライアントへレスポンスするデータ - メッセージ内容が何であるか、ヘッダーに記述されている。レスポンスに含まれるメタ情報(ヘッダー情報)で内容がどのようなものかわかる。 5-4)アプリケーション状態エンジンとしてのハイパーメディア(HATEOAS) - Hypermedia as the Engine of Application State - レスポンスに現在の状態を踏まえて関連するハイパーリンクがふくまれる。例)検索結果ページにおける「次ページ」 |
【メリット】 - システムアーキテクチャ全体が簡素化されてわかりやすくなる。 - 提供するサービスに集中でき、独自の進化ができる - 異なるブラウザでも同じような画面を表示できる 【デメリット】 標準化によって効率が犠牲になる |
6 | 階層化システム | 多層アーキテクチャ構成(Web→AP→DB) | 【メリット】 各システム(コンポーネント)に役割を決めて独立させることで進化と再利用が促進できる 【デメリット】 データ処理にオバーヘッドが発生→ユーザーから見ると応答が悪く見える。(ただしキャッシュを利用することで改善できる) |
7 | コードオンデマンド | クライアントコードをダウンロードして実行できる | 【メリット】 リリース済みのクライアントに対して機能追加ができる。サーバーの負荷が下がる(=くらアインとに処理が移譲できる) 【デメリット】 評価環境が複雑になる(多数のブラウザと様々なクライアント環境※インストールされているアプリが異なる) |
(参考文献)
www.slideshare.netAPI設計レベル
- 最近よく見るレベルはレベル2のものが多い。
レベル | 概要 | 詳細 |
---|---|---|
LEVEL0 | REST API 基本レベル。RPCスタイルのXML通信 | - HTTPは単なる通信手段として利用。 - 1URLですべて完結。 - リクエストボディーに処理と引数が含まれる |
LEVEL1 | リソースごとにURLを分割 | - リソースごとにURLを分離 - HTTPメソッドは活用できていないので、GETかPOSTのみでの通信しかしていない |
LEVEL2 | HTTPの動詞を導入 |
- LEVEL1に加えてHTTPメソッドを活用する - リソースに対してHTTPメソッドを使ったCRUD操作が行われている |
LEVEL3 | HATEOASの概念を導入 | - LEVEL2に加えてレスポンスにリソース間のつながりが含まれる - レスポンスに現在の状態に関連するハイパーリンクが含まれている |