はじめに
RESTについて学んだことをまとめました。
APIとは
APIとはApplication Programming Interfaceの略。
機能やデータを外部から呼び出して利用できるように定めた規約のこと。
RESTとは
REpresentational State Transferの略。
分散型システムにおける設計原則群(設計ルール)のこと。
RESTには下記6つの原則がある。
- クライアント/サーバー制約
- ステートレス
- キャッシュ制御
- 統一インターフェース
- 階層化システム
- コードオンデマンド
クライアント/サーバー制約
クライアントとサーバーが依存することなくそれぞれが独立し、お互いに影響なく改良ができるような構造にすること。
画面とデータで関心事が分離されるため、どちらか一方が変更されても影響を受けにくくなる。
基本的には、クライアント側がトリガーとなり、サーバー側が受け身となる。
ステートレス
リクエストの情報のみからレスポンスを返す(状態を保持しない)こと。
前のやりとりの結果に影響を受けないので、障害発生時には対象のリクエストのみを確認すれば良いため、復旧が容易になるメリットがある。
キャッシュ制御
クライアント側のアプリケーションはレスポンスをキャッシュできる。
それにより、クライアントとサーバーの通信が排除され、ユーザー体験、リソース効率、拡張性の向上が見込める。
統一インターフェース
情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。システムアーキテクチャ全体が簡素化され、わかりやすくなるメリットがある。
階層化システム
複数のWEBサーバ、APサーバ、DBサーバで構成されるシステムのこと。システム内の機能やコンポーネントを階層的に組織化し、それぞれの階層が特定の役割を持つように設計されてるため、システムの保守や拡張がしやすくなるメリットがある。
コードオンデマンド
サーバ側にあるHTMLやJavaScriptなどのプログラムをクライアント側にダウンロードして利用できること。リリース済みのクライアントに対して機能追加ができることや、サーバーの負荷が下がるメリットがある。
REST APIの実装例
movieをリソースとしてCRUD操作のURI、HTTPメソッドを定義すると、下記のように実装されます。
URI | HTTP method |
---|---|
http://api.example.com/movies | GET |
http://api.example.com/movies/12345 | GET |
http://api.example.com/movies | POST |
http://api.example.com/movies/12345 | PUT |
http://api.example.com/movies/12345 | DELETE |