REST(Representational State Transfer)は、分散ハイパーメディアシステムの設計に用いるアーキテクチャスタイルです。メッセージ形式や特定のプロトコルそのものではありません。HTTPとJSONを使うだけで、全てのRESTの制約を満たすとは限りません。
設計の制約を整理
| 制約 | 考え方 |
|---|---|
| クライアントとサーバーの分離 | 利用側と提供側の責務を分ける |
| ステートレス | 各要求だけで処理に必要な文脈が分かる |
| キャッシュ | 応答が再利用できるかを明確にする |
| 統一インターフェース | リソースの識別、表現による操作、自己記述的メッセージ、ハイパーメディア等 |
| 階層化 | 中継が入っても隣接する相手とのやり取りで扱える |
| コードオンデマンド | 必要に応じて実行コードを提供する任意の制約 |
リソースと表現
書籍をURIで識別し、その情報をJSONやXMLなどの表現として取得する例があります。URIはデータベースの行そのものではなく、識別する対象を示します。HTTPの利用では、GETで取得、PUTで指定URIの状態の作成・置換等、各メソッドの意味を守ります。POSTが常にデータベースへの新規追加だけを意味するわけではありません。
ステートレスでも業務データは保存する
ステートレスは、前の要求の会話状態に頼らず各要求を理解できるという制約です。商品や注文などのリソース状態をサーバーやデータベースに保存しない、という意味ではありません。認証に必要な情報も、要求を処理できる形で渡します。
キャッシュ・階層化の注意
全ての応答を無条件に保存してよいわけではありません。再利用の可否や有効期間、個人別の応答の扱いを定めます。RESTの階層化は中継やサービス構成の制約であり、OSIの7階層そのものとは別の話です。
安全性や処理速度は、認証・認可、入力検証、データ量、通信、実装などに依存します。RESTという名称だけでは保証されません。
確認問題:RESTはサーバーに注文データを保存することを禁止する?
禁止しません。リソースの状態と、要求をまたぐクライアントの会話状態を区別します。
関連する記事
通信の基礎をnoteで復習する
RESTの設計制約と、HTTP・TCP・IPの通信階層を混同しないための基礎復習に使えます。
この教材は通信階層の復習用です。本記事の個別仕様を詳説する教材ではありません。
コメント