RESTとは
REST(Representational State Transfer)
Web上でシステム同士が通信するためのアーキテクチャスタイル。
- Representational:代表的な
- State:状態
- Transfer:転送
この頭文字をとったもの。
ビジネスシステムにおいて他のアプリケーションと安全・効率的に通信するために使われる設計思想。
このRESTの考え方に沿ったAPIを、RESTful APIと呼ぶ。
もっと簡単に言うと…
Webサービス設計思想(どうやってアプリを作るかの考え方)の1つ。
RESTは、特によく使われている有名な設計方法。
データに対して、HTTPの標準的なメソッド(GET、POST、PUT、DELETEなど)を使って操作する。
建築も目的によって設計が変わるように、アプリケーションも何を目的とするアプリケーションになのかによって設計方法が変わってくる。
REST設計のルール
四原則・または六原則のルールが存在する。(六以上ルールがあったりもする)
これらが満たされてると、RESTfulな設計と呼ばれる。
1. アドレス可動性
リソースを一意なURIで識別できること。
それぞれの情報(リソース)は一意なアドレス(URLやURN)を持っている状態である、ということ。
URIとは?URLとの違い
URI(Uniform Resource Identifier)
❌URLとは別。最初誤字かと思った。
- リソース(資源)を一意に識別するための文字列。
- リソースを識別する全体の枠組み。URLとURNを含む。
- Web上にある、あらゆる識別子の総称。
- Web上の文書、画像、サービスなどのあらゆるリソースに使われる。
- URIは大きなカテゴリで、その中にURLやURNが含まれる。
URL(Uniform Resource Locator)
- URIの一種。
- Web上にあるリソースの場所を指定する。(ファイルの住所)
- 例:
https://example.com
URN
- リソースの名前を表すもので、URLが変更されても変わらない。永続的な識別子。
- Web上にあるファイルの名前。
- 例:
urn:isbn:978-4-06-517094-6
URI(Web上にある、あらゆる識別子の総称。)
├── URL(場所を指定)
└── URN(名前を指定)
参考文献
2. 統一インターフェース
- クライアントとサーバーが一貫したやり方で、やり取りをできるようにするルール。
- HTTPメソッド(GET・POST・PUT・DELETE)を用いて、リソースを操作させていること。
- 異なるシステムでも、同じ方法で通信させることで、再利用性・可読性高める。
HTTPメソッドについては、こちら
HTTPメソッドとは
HTTPメソッドとは
クライアントが(主にブラウザやアプリ)がサーバーに対して「何をしたいか」を伝えるための指示。
「このURLに対して、何をしたいのか?」を伝える命令の種類。
よく使われるHTTPメソッド一覧
メソッド | 用途 | 例え |
---|---|---|
GET | 情報を取得する | 「これ見せて!」 |
POST | 新しいデータを作成する | 「これ追加して!」 |
PUT | 既存データを更新する | 「これまるっと入れ替えて!」 |
PATCH | 一部だけを更新する | 「この部分だけ直して!」 |
DELETE | データを削除する | 「これ消して!」 |
例:本の情報を管理するAPI
操作内容 | HTTPメソッド | URI例 |
---|---|---|
本の一覧を取得 | GET | /books |
本を新しく追加 | POST | /books |
本の内容を更新 | PUT | /books/123 |
本を削除する | DELETE | /books/123 |
3. ステートレス性
- サーバーはクライアントの状態を保持しない。
- 各リクエストは独立して完結している必要がある。
- cookieやsessionを使ったステートフルな設計とは逆。
- 昔の情報を保持すると管理が大変。状態を持たないことで、シンプルかつ拡張性の高い設計が可能に。
4. 接続性
- Webではリソース同士がハイパーリンクでつながっていること、
- クライアントがは、レスポンスをたどることで、次に何ができるか理解できる。
- 情報にハイパーリンクを含めることで、ユーザーは別のリソースにも簡単にアクセス可能。
5. クライアントとサーバーの分離
Webサービスなどのアプリケーションは「クライアント」、「サーバー」、「リソース」で構成されている。
RESTでは、クライアントとサーバーが完全に独立して、分離していることが必要。
6. 階層化システム
RESTアーキテクチャを複数の階層(レイヤー)で構築することで、各レイヤーが役割を分担し、他の層から独立して動作するようにする設計スタイル。
クライアントとサーバーの間に、ロードバランサーを設置して負荷分散したりなど
それぞれの階層が、特定の役割を持つようにしていること。
これにより、セキュリティ・負荷分散ができた構造になる。
具体例(よくある3階層):
-
クライアント層(Client Layer)
- ユーザーやアプリケーションがアクセスする部分。
- APIを呼び出す側。
-
アプリケーションサーバー層(Application Layer)
- ビジネスロジックの処理。
- ここでリクエストを受け取り、レスポンスを返す。
-
データ層(Data Layer)
- データベースなど実際の情報が保管されている層。
7. オンデマンドのコード(必須機能ではない)
サーバー側にあるコード(HTMLやJavaScript)を、クライアント側にダウンロードして利用できるような構造のこと。
クライアントの機能を一時的に拡張・カスタマイズできる。
RESTful API
APIの中でもRESTの原則に基づいて設計されたAPI。
HTTPメソッドを使用してリソース操作を行う。
特にアクセスが集中するようなアプリケーションに使用する。
参考文献
以下、YouTubeのRESTに関する動画
Discussion