Webを支える技術:リソース設計とは

リソース設計は、クライアントとサーバ間のインタフェース設計、つまりWebサービスやWeb APIの外部設計のことを言う。

設計のポイントは、どのようにリソースを分割し、URIで名前をつけ、相互にリンクを持たせるかという点。その際、WebサービスとWeb APIを分けて考えないということも大切。

リソース設計のアプローチ(読み取り専用)

リソース設計の指針として、『リソース指向アーキテクチャ』があり、このアーキテクチャでは4つの性質を満たす。

項目 説明
アドレス可能性 URIだけでリソースを一意に特定できる。
接続性 リソースをリンクで接続し、1つのアプリケーションを構成する
統一インタフェース HTTPのように決められたメソッド(GET/POST/PUT/DELETE等)でアクセスする。
ステートレス性 状態を持たない通信。現実的にはCookieによるセッション管理が世の中の主流のため、そこまで重要でない。

設計アプローチは、次のステップから構成される。(ステップ4からは、それぞれのリソースに対して実施していく。)

  1. Webサービスで提供するデータを特定する
  2. データをリソースに分ける
  3. リソースにURIで名前をつける
  4. クライアントに提供するリソースの表現を設計する
  5. リンクとフォームを利用してリソース同士を結びつける
  6. イベントの標準的なコースを検討する
  7. エラーについて検討する

Webサービスで提供するデータを特定する

サービスで提供するデータを理解し、特定する

データをリソースに分ける

リソースは、Web上に存在する名前のついた情報であるため、『当該のWebサービスが提供する情報は何か』について考え、リソースを分けていく。

注意としては、『何かを検索する』というのは機能であるため、『検索結果』という情報がリソースになる。

リソースにURIで名前をつける

リソースがとして一意に定まるようなものはURIに組み込む。例えば、郵便番号のようなものは、それだけで一意に定まるため、次のようなURIになる。

http://example.com/1120002

クライアントからの入力を受け取るもの(検索等)は、次のようにクエリパラメータを利用する。

http://example.com/search?q=名古屋市

一部がパラメータとして変動するURIを記述する場合は、パラメータ部分をURI Templateという{}で括った表記が一般的。

http://example.com/search?q={query}

階層構造を持つリソースは/URIを表現する。例えば、市町村であれば次のような表記になる。

http://example.com/{都道府県名}/{市町村名}/{町域名}

クライアントに提供するリソースの表現を設計する

XML表現、軽量フォーマット表現、マルチメディア表現といった表現形式を決定する。1つのリソースが複数の表現形式をサポートしていると使い勝手が良い。

リンクとフォームを利用してリソース同士を結びつける

上記までで設計してきたリソースをリンクで接続する。トップページへのリンクやパンくずリストなどを用意するのが一般的。

接続した結果のリンク関係を図に起こしてあげると、リンク付け漏れなどの問題に気付きやすい。

イベントの標準的なコースを検討する

Webサービス提供者が想定する標準的な利用コースを考える。ユースケース記述のようなものをイメージするとわかりやすい。

エラーについて検討する

『存在しないURIを指定された』、『必須パラメータがない』、『サポート外のメソッドを使用』といった形で、どのような時にどんなステータスコードを返すかを検討しておく。

リソース設計のアプローチ(書き込み可能)

基本的なアプローチは読み取り専用時と同じだが、注意を払う必要がある処理もある。それぞれの処理および対応について、次にまとめる。

注意を払う処理 対応方法
複数リソースの更新 バッチ処理(作成・更新したいリソースを一括で送信)
複数ユーザによる同時書き込み 排他制御(複数のクライアントが同時に1つのリソースを編集して競合が起きないように、1つのクライアントのみが編集するように制御する)
複数の処理手順を必ず実行する トランザクションリソース(複数のリソースにまたがった変更をひとまとまりに扱う

データからリソースにする検討方法

リソース設計のアプローチの『Webサービスで提供するデータを特定する』、『データをリソースに分ける』の部分がかなり苦労する。

その設計方法として次のものがある。

既存設計手法の成果物 導出が得意な部分 導出が苦手な部分
ER図 リソースのリンク関係 ・階層構造
・トップレベルリソース
クラス図 ・リソースのリンク関係
・階層構造
トップレベルリソース
情報アーキテクチャ ・リソースのリンク関係
・階層構造
・トップレベルリソース
特になし

情報アーキテクチャは、リソース指向アーキテクチャと相互に保管関係にあるため、ER図やクラス図のものよりも設計の上で相性が良い。

参考