1.はじめに
こんにちは。かじです。
今回はRESTについて解説していきたいと思います。
皆さんは、RESTと聞くと何を想像するでしょうか。REST APIを想像し「HTTPでアクセスで、データをXMLやJSONを返すAPI」という認識を持つでしょう。
Web APIと言われると外部のプログラムからWebサービスへアクセスしてリクエストしたリソースを取得するものであると理解できると思いますが、REST APIと言われるとRESTの意味がイマイチ分からないという方も多いかと思います。
今回はそのRESTの意味合いを深掘りしていきたいと思います。
2.RESTとは何か
RESTとは、Roy Fielding氏が2000年に発表した論文において定義したアーキテクチャスタイルのことです。彼は、Webの成功の要因は「REST」と名付けたこのアーキテクチャスタイル(システムを構成するための指針)であるとしました。
RESTは「Representation State Transfer」の頭文字を取っており、HTTPはハイパーテキストを転送するプロトコルですが、実際には、ハイパーテキストだけでなくリソースの状態を運んでいるというのがFielding氏の主張でした。
クライアント/サーバのアーキテクチャスタイルに加えて、複数のアーキテクチャスタイルを組み合わせて構築されたものでありますが、リンクを辿ることでアプリケーションを実現する分散ネットワークシステムとしてのアーキテクチャスタイルという側面もあります。
3.RESTの特徴
RESTの特徴は以下の6つです:
- クライアント/サーバ:単一のコンピュータ上で全てを処理せず、分離して処理することで、クライアントがPCに限らず、サーバはデータストレージとしての機能だけを提供することができます。
- ステートレスサーバ:サーバー側がアプリケーションの状態を管理しないことで、サーバの実装を簡略化でき、レスポンス後に計算機リソースを解放できます。
- キャッシュ:一度取得したリソースをクライアント側で使い回すことで、通信回数を減らし効率的に処理できます。
- 統一インタフェース:URIで指し示したリソースに対する操作を統一したインターフェースで行うことで、アーキテクチャがシンプルになり、クライアントとサーバの独立性が向上します。
- 階層化システム:ロードバランサーによる負荷分散やプロキシによるアクセスを制限するなど、階層化することが可能です。
- コードオンデマンド:プログラムコードをサーバからダウンロードし、クライアント側で実行することが可能です。
これら全ての特徴を実装しないとRESTではないという訳ではありません。例えば、ステートレスに関しては、現状Cookieによるセッション管理を行なっているサービスは多数存在します。それではセッション管理を行なっているサービス全てがRESTという訳ではありません。
RESTにおいて大切なのは、上記の6つの特徴を全てを網羅するということではなく、サービスによってRESTの要素を選択していくということがあります。
今回は以上になります。最後まで閲覧くださりありがとうございました。
– 参考書籍 –
Webを支える技術 ―― HTTP,URI,HTML,そしてREST
– 画像出典元 –