REST アーキテクチャについて調べた

プログラミング

RESTアーキテクチャとは

初めにRESTアーキテクチャとは何か。RESTアーキテクチャとはネットワークを使ったアプリケーションのための設計手法。そのなかでも特にクライアント-サーバー アプリケーションのための設計手法

RESTの名前の由来

RESTはRepresentational state transferの略。

RESTアーキテクチャではクライアントとサーバーは出来るだけ独立させるべきと考えられており、サーバーが保持するファイルをエンティティ、それをカプセル化したものをリソースと呼ぶ。(なので基本的に名前がある情報はすべてリソースと呼ぶ) そしてクライアントはそのリソースをURIを使って指定することでのみデータを取得することができる。その際にリソースをjsonだったりXMLだったりのテキストベースのデータに変換して渡すのだが、その変換されたデータを
a representational of the resource
と呼んでいる。これがREST由来だと思われる。(上の説明は画像1を参照)
(Representational な状態のresourceをtransferするってことだと筆者は解釈しました。気になる人はRoy Fieldingが出してるの原文の5章を見てね。)

画像1(海外版Wikipediaより引用)

RESTの制約

よく4つの原則なんて言われているが、発表者のRoy Fieldingの博士論文(RESTが初めて発表された文章)や海外のサイトでは6つの制約(constrains)と言われている。(いろんなサイトを見る限り、こっちのほうが正しい気がする。)
その6つの制約は以下

  1. Client-Server
  2. Stateless
  3. Cache
  4. Uniform Interface
  5. Layered System
  6. Code-on-demand (Optional)

Client-Server

これはクライアントとサーバーを別で設置し、HTTP経由で要求をするというもの。出来る限り独立性を保つことが重要だと述べられている。この理由は巨大なスケールに拡張させることが容易になるからである。この独立性をさらに高めるために後述するLayered Systemというものが存在している。

Stateless

クライアント情報は格納されず、各要求は独立している。
すると、サーバーはセッションデータを保持する必要がなくなるため、それをロードする時間が減るためパフォーマンスが向上する。

Cache

不要なクライアントとサーバー間の通信をなくすことが出来るため、パフォーマンスの向上につながる。(本当は色々書いてあるんだけど分からなかった。)

Layered System

前述したようにクライアントとサーバー間を独立させるためのシステム。RESTの名前の由来でも引用した画像がレイヤー分けされたRESTアーキテクチャ。レイヤー分けをすることでクライアント側から直接サーバーにアクセスすることを避けることが出来る。こうすることで利用者(プログラマ)はサーバーのことを気にすることなく開発が出来る。またサーバーなどのシステムを自由に拡張することが出来る。

例えばプロキシだったりロードバランサがクライアントとサーバーの間に設置してシステムを改良することは直接のコミュニケーションには影響を及ぼさない。

またレイヤー分けすることで、セキュリティの向上につながる。

Code on demand

実行可能コードを要求されたときにサーバーからクライアントに送信して、クライアントの機能を拡張する機能 。例としてJavaScriptが挙げられている。

RESTアーキテクチャが提供するもの

提唱者のRoy Thomas Fieldingは博士論文にて、RESTは全体として

  • コンポーネントの相互作用の拡張性
  • インターフェイスの一般性
  • コンポーネントの展開の独立性

を強調する構造の制約と

  • 相互作用の遅延の低下
  • セキュリティの強化
  • 古いシステムのカプセル化

これらを行うための仲介物を提供すると述べている。仲介物とは何ぞやと思ったのだが恐らくRESTful APIのことを指すのだろうと推測した。

終わり

今日はRESTアーキテクチャについて調べた。最近では広く普及しているので実は知らずに使っていたなんてこともあると思う。今度は実際にRESTfulなAPIを簡単に作ってみようと思う。

コメント

タイトルとURLをコピーしました