SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

Tips, REST

RESTについて。

REST(Representatinal State Transfer)

クライアント/サーバから派生したアーキテクチャスタイル*1。RESTはクライアント/サーバアーキテクチャに制約を加えていくことで、Web全体を統一したアーキテクチャを実現しており、Webサービスを設計する際は、RESTの設計思想を考慮して設計することが現在の基本となっている。

RESTは複合アーキテクチャであり、以下のような制約が組み合わされている。

クライアント/サーバ
  →ユーザインターフェースと処理の分離を実現する。
  →マルチプラットフォーム
ステートレスサーバ
  →サーバ側ではクライアントのアプリケーション状態を管理しない。
  →サーバ側の実装を簡素化
キャッシュ
  →クライアント側によるリソースの再利用。
  →通信の減少によりリソースの効率化
統一インターフェース
  →リソースに対する操作を統一する。
  →クライアントとサーバの実装の独立化を向上、互換性問題の対処
階層化システム
  →階層的なリソース設計する。
  →インターフェースを統一することで、ロードバランサやプロキシの設置が可能
  →クライアントは何が設置されているかを意識しなくて済む
コードオンデマンド
  →コードをサーバからダウンロードし、クライアント側で実行する。
  →クライアント側は後から拡張出来るようになる

RESTを設計する際に重要なのはリソースを意識すること。リソースはURIを指し、RESTにとっての作業の最小単位はリソース同士の持つリンクを辿ることである。同じURIや同じパラメータを利用することで、全く同じ結果が返ってくることが期待されるため、あるアプリケーションが提供しているリソースを、他のアプリケーションが再利用することも可能となる。また、RPCやCORBAといった分散型オブジェクトでは、関数やメソッドの単位でサーバ側の処理を呼び出すため、性能劣化を引き起こしがちだが、RESTにおける作業はリンクを辿ることであり、リソースそのものがデータの塊であるためRPC等よりもデータの粒度が大きく、性能劣化が抑えられる特徴がある。


RESTfulな設計を心掛けよう。
現場からは以上です。

*1:アーキテクチャスタイルとは、アーキテクチャ(ブラウザ/サーバ/プロキシ/URIなど)から抽象度を一つ上げた構造体を指す。

Remove all ads