RESTってなに?
Representational State Transfer の略
APIの設計思想である。
2000年にRoy Fieldingが論文で初めてRESTという言葉を使い、RESTに関する内容は大きく以下の6つを発表した。
- Client-Server (クライアント/サーバー)
- Stateless (ステートレス)
- Cache (キャッシュ制御)
- Uniform Interface (統一インターフェース)
- Layered System (階層化システム)
- Code-On-Demand (コードオンデマンド)
現在では参考記事のサイトや他の記事を見ても下記の4つくらいにわかりやすくまとめられていることが多い。
- Statelessness(ステートレス性)
- Uniform Interface(統一インターフェース)
- Addressability(アドレス可能性)
- Connectedness(接続性)
参考 : RESTful APIとは何なのか #API - Qiita
Statelessness(ステートレス性) RESTにおけるステートレス(状態を持たない)は、同じクライアントであっても各リクエストが前後のリクエストと独立していることである。
それにはサーバーの資源をすぐに解放できるというメリットがある。 例として、冗長化されていて異なるサーバーに毎回リクエストを送る場合でも、リクエスト内に必要な情報を全て含めるため問題なくクライアントの望むレスポンスを受け取ることができる。Addressability(アドレス可能性) 各リソースやサービスは統一された一意のURIのパス(uri/moviesなど)で表現され、アクセスが可能である。
Uniform Interface(統一インターフェース) 定めたURI(リソース)の操作がCRUDに応じてGET(READ), POST(CREATE), PATCH/PUT(UPDATE), DELETE(DELETE)という各HTTPプロトコルのメソッドによって行うことができるように設計する。
Connectedness(接続性) HTMLのように他のAPIのハイパーリンクを含めることができる。 とあるAPIのレスポンスのボディに、関連する別のAPIのURIが含まれることがある。
まとめ
かなり大まかに、かつシンプルに要点だけを抜き出すと以下のようにも表現することができそう。
- 情報やサービスをリソースとして扱うこと。
- URIを見てなんのリソースやサービスかが一目でわかり、HTTPプロトコルの各メソッドを動詞として考えた際になんの操作なのかがわかるようになっていること。
- ステートレスであること。
ユーザーからのメリット:アドレスを見て何のページが表示されるかを予想、理解がしやすい。
開発者のメリット:統一されたインターフェースがあるためURIやHTTPメソッドに関して一貫したパターンに従って開発ができ、サービスの開発に集中しやすくなる。