はじめに
これから本格的にRailsの学習の方に入っていくのですが、
その前にどうやらREST APIという概念を知っておかなくてはいけないようです。
なので今回はそのREST APIについての学習を記事にします。
REST APIとは
REST APIは一言で言うとRESTなAPIのことです。
RESTful APIとも呼ぶみたいですね。
これを理解するためにはRESTとAPIについて理解する必要があるので
以下それらについてまとめます。
REST
RESTはRepresentational State Transfer(分散型システムにおける設計原則群)の略で
webシステムを構築する際の設計思想です。
RESTには設計における原則が以下の6つがあります。
1.クライアント/サーバー
→ネットワークに繋いで使うアプリはほぼ全てこの構成だと思います。
コンピュータやスマホのようなクライアントにサーバーから
送信されたデータを表示し、サーバーはクライアントからこういうデータが欲しい
というリクエストを受けてデータを生成しレスポンスとしてそのデータを返します。
2.ステートレス
→状態を保存しないという意味です。会話に例えると前に話した内容を相手が
覚えていないということを前提でお話が進みます。
相手に欲しいものを頼むときに最初「Aが欲しい。」と言った後に
やっぱりBも欲しくなったときにステートレスであると以前の会話を
覚えていないので「AとBが欲しい。」と言う必要があります。
3.キャッシュ制御
→クライアント側はサーバーからのレスポンスを明示的または暗黙的に
キャッシュできます。適切にキャッシュを行うことで余計な通信が省けて
ユーザーの体験の向上、リソース効率の向上、拡張性の向上につながる。
ただ、デメリットとして古いデータを戻してしまうとデータの不整合が起きて
信頼性の低下につながるので注意が必要です。
4.統一インターフェース
→「リソースの識別」、「表現を用いたリソース操作」、「自己記述メッセージ」、
「HATEOAS」の4つの制約から成り立っています。
「リソースの識別」はURIでサーバーに保存されたリソースを識別することを
意味しています。 ここで言うリソースとはサーバーに保存されている
名前がつけられているあらゆるデータのことです。
「表現を用いたリソース操作」はクライアントに返されるレスポンスやサーバーへ
POSTするデータなどの断面情報を用いてサーバー上のデータを
操作することです。
「自己記述メッセージ」はメッセージ内容がヘッダーに記述されていることです。
自己記述とはデータ自身がデータの中身を説明していることで、
メッセージとはクライアントとサーバーの間でやり取りされるデータを指します。
「HATEOAS」は「Hypermedia as the Engine of Application State」の略で
レスポンスの情報に現在の状態を踏まえたハイパーリンクを含めることです。
webページにおける「次へ」ボタンなどがそれに当たります。
5.階層化システム
→各サーバーでAPサーバー、DBサーバーのように役割を分担させて
進化と再利用をできるようにする構成です。しかし、一回の処理で様々な
サーバーとの通信が発生(オーバーヘッド)してレスポンスが遅れてしまいます。
これはキャッシュを利用すると改善が見込めます。
6.コードオンデマンド
→サーバーからソースコードをダウンロードしてきて
クライアントでそれを実行することです。
これによりサーバーのソースコードのみを変更するだけで機能の拡張ができ、
後からの調整が容易になります。ただ、クライアントで実行するブラウザが
それぞれで異なるためテストが面倒になります。
API
「Application Programming Interface」の略で外部のアプリケーションから
データや機能やデータを呼び出せるようにする規約です。
APIを利用することによってすでに世の中に公開されているAPIで
実装を効率よく進めることができます。
最後に
結論としてREST APIはRESTの原則に則って作られたAPIと言うことになります。
学習していて初耳のワードもたくさん出てきて最初は理解するのに苦労しました。
調べてみるとRESTというのはあくまで設計思想なので厳密にこうすべきみたい
なものってGAFAみたいな企業などがREST APIについてのガイドラインを作るまで
なかったようですね。まだ歴史が浅いITという世界ならではという感じがします。