はじめに
WEB技術(主にREST API)について学んだことをまとめました。
APIとは
Application Programming Interfaceの略
具体的には:アプリケーション同士の連携や別のアプリケーションへの機能提供など、一方のアプリケーションからもう一方のアプリケーションを呼び出すためのもの
RESTとは
Representational State Transfarの略
簡単に言うと設計ルール、具体的に言うと6つの制約に準拠した設計思想です。
6つの制約とは
RESTの6つの制約とは、以下を指します。
- クライアント/サーバー
- クライアントとサーバーにシステムを分離することです。具体的には、クライアントにUI(ユーザーインターフェース)、サーバーに処理、といった感じに分離します。 - キャッシュ制御
- クライアントとサーバーのやり取り回数を減らすための制御です。クライアントはサーバーからダウンロードしたリソースを一定期間保持します。
- コードオンデマンド
- プログラムをクライアントにインストールして実行します。JavaScriptだったりクライアント側で実行されるものについてはこのコードオンデマンドに該当します。
- 統一インターフェース
- インターフェースを固定化します。 URIではリクエストの処理を指定しますが、その際の処理を限定化することを言います。例えば、データの取得時にはGETmethod、更新時にはPUT、POSTのmethod、削除時にはDELETEのmethodなどです。8つのメソッドがありますが、基本は CRUD操作に準拠したメソッドが多く使われます(CRUD操作については後述)。
- 階層化システム
- Webサーバー、APサーバー、DBサーバーなどそれぞれの役割ごとに独立させることを言います。多くの階層化システムは、それぞれのサーバーを複数台構成にしたものを指します。
- ステートレス
- サーバーが状態を持たないこと言います。クライアントがサーバーに対してリクエストを投げる際、常に全ての情報を持ってリクエストを投げます。サーバーが前後情報を持たないため、リクエストが冗長になりますが、サーバー側の利点としては前後情報を見る必要がないので単一のやり取りのみを気にしていればよく、シンプルに考えることができます。
各制約のメリット・デメリットは以下の通りです。
制約名 | メリット | デメリット |
---|---|---|
クライアント/サーバー | UIと処理を分離することでマルチプラットフォームに対応できる | 処理をサーバーが受け持つため、サーバー側に障害が起きるとシステムを利用できなくなる |
キャッシュ制御 | クライアントとサーバー間の通信回数が減ることでサーバーの負荷が軽減される | クライアント側にダウンロードしたリソースが最新のものではなくなる |
コードオンデマンド | クライアントの拡張が容易になる | アプリケーションのプロトコル可視性が低下 |
統一インターフェース | メソッドなどが統一されているためシンプルで扱いやすい | HTTP1.1であればメソッドが8個に限定されているため拡張性に欠ける |
階層化システム | コンポーネント(各サーバーを指す)が独立しているため他のコンポーネントに影響を与えず、進化と再利用がしやすい。 | 複数のコンポーネントを構えているため、ユーザーから見て応答が悪く見える |
ステートレス | 1回のやり取りのみを考慮して設計を行えば良いので何かとシンプルになる | 前後の情報を持たないため、都度のやり取りが冗長になる |
CRUD操作とは
統一インターフェースで出てきたCRUD操作について説明します。
Create(登録)、Read(読み出し)、Update(更新)、Delete(削除)の操作をまとめた略語です。
それぞれをHTTPmethodに置き換えると
操作 | HTTP method |
---|---|
Create | PUT, POST |
Read | GET |
Update | PUT |
Delete | DELETE |
となります。
URIの設計について
URIの設計についてはシンプルに、外部からの呼び出しでもURIがわかるようにします。
リソースmovie(ここでは映画の情報とします)を例に挙げて説明します。
CRUD操作に対してそれぞれのURIを設計すると、以下の通りになります。
URI | HTTP method | 操作 |
---|---|---|
api.sample.com/movies | GET | 映画情報一覧を取得 |
api.sample.com/movies | POST | 映画情報を新規作成 |
api.sample.com/movies/1 | PUT | 映画情報を更新 |
api.sample.com/movies/1 | DELETE | 映画情報を削除 |
api.sample.com/movies/1 | GET | 特定の映画を新規作成 |
URI設計は、シンプルでわかりやすい単語を選ぶことが重要ですが、略しすぎて何を意味しているかわからないものは避けましょう。