最近よくREST APIって名前を聞くけど、どういったものなんだろう…
よくわからないけど、みんな知っている雰囲気だし、なんか恥ずかしくて聞けない…
上記お悩みの方向けの記事になります。
本記事で以下の内容をお伝えします。
・REST APIの具体例
初心者向けに分かりやすくREST APIがどういったものかお伝えします。
クライアントサーバモデルのWEBアプリケーションですと、REST APIを採用していることが多いです。
バックエンドエンジニアはもちろんのこと、フロントエンドエンジニアの方も理解しておいたほうがいい内容になります。
REST APIとは?
REST APIとは、一言でいうとRESTという考え方で設計したWeb APIになります。
RESTful APIともよばれます。
少しかみ砕くとRESTという全世界共通のルールがあると思って頂ければ良いと思います。
そのルールに従って作成したWeb APIになります。
上記だけではイメージがわかないかと思いますので簡単例えてご説明します。
具体的には「カレーライス専門の飲食店」があったとします。
カレーライスを作るというルール(REST)に従った飲食店(Web API)といった形です。
もし、カレーライスを作るというルールを守っていない飲食店は「カレーライス専門の飲食店」ではなくただの飲食店になります。
REST APIも同じでRESTというルールを守っていないWeb APIは、REST APIではなくただのWeb APIになるということです。
まず、REST APIを理解するためには、RESTとWeb APIを各々どういったものかを知っておく必要があります。
上記の例えでいくとまず「カレーライス」と「飲食店」を知らないとカレーライス専門の飲食店がどんなものかが分からないのと同じことです。
順に説明していきます。
APIとは?
APIは「Application Programming Interface」の略になります。
外部から呼び出しできるサービス(機能)を利用するための決まり事みたいなものです。
クライアントサーバでAPIというとWEB APIのことを指すことが多いです。
上記だけだと分かりにくいので簡単に説明します。
説明する例としては、よくあるWebアプリケーションのクライアントとサーバの関係で説明していきます。
まず、WEBサーバの役割としてクライアントからHTTPのリクエストに対して、サーバは処理を行いレスポンスを返します。
簡単に例を出しながら説明すると以下のような流れです。
例えば画像の一覧を表示する画面があったとします。
この画面を開いたときに画面はどういう処理をするかというと画面を初期表示する処理でサーバに向けて「画像の一覧ちょーだい!」という風に要求(リクエスト)します。
それを受けたサーバは「はいはい、画像の一覧ですね!」といった感じにリクエストを受けて、サーバ内の画像を取得して最後に「画像の一覧です!どうぞお受け取り下さい」とレスポンスを返します。
この情報をクライアントが受け取って、画面に画像一覧が表示できることになります。
上記の例の場合、WEBサーバは画像一覧を取得する機能を持っています。
この機能のことをAPIといいます。
サーバを飲食店に例えるとAPIはおしながき(メニュー)のようなものです。
クライアントはお客さんのような位置づけで、メニュー(API)を見て注文(リクエスト)します。
オーダーを取ったサーバは料理して出来上がった料理をお出しするといった流れになります。
なので、サーバはあらかじめどういった機能(API)を提供するかあらかじめ決まっています。
クライアントからよくわからないリクエストがくると「そんな機能ないよ!」ってエラーを返します。
飲食店でいうとメニューにない食べ物を注文している感じです。
RESTとは?
RESTというのは何かというと以下のルールのことを指します。
②統一インターフェース:HTTPメソッド(POST、PUT、GET、DELETE)で追加、更新、取得、削除を設計する
③ステートレス性:ステートレスであること(セッションといった状態管理をしない)
④接続性:HTML、XMLなどのハイパーメディアの使用すること(ハイパーリンクが使用できること)
上記のルールに従って作成したAPIのことをREST APIということになります。
分かりやすくするために簡単に書きましたが、詳細はwikipediaを見て頂けますと幸いです。
上記を理解するためにまずHTTPリクエストがどういったないようかを知っておく必要があります。
以下のサイトが分かりやすく説明されていますので、もしHTTPリクエストをあまり知らない人は一度ご確認頂けたらと思います。
具体的にRESTでないAPIとREST APIの違いを次項に説明します。
これらの違いを確認しながら、RESTのルールを理解して頂けたらと思います。
REST APIの具体例
では、具体的にRESTのルールがどういったものか例あげてひとつずつ見ていきましょう。
アドレス可能性:Addressability
まず、「①アドレス可能性:URIではリソースの指定を行う」ですが、URIはいわゆる接続先のことを指します。
ブラウザでよく見る「https://~」のことです。
このURIで指定するものをリソースにするということです。
※リソースというのは情報やデータの種類のことを指していると思って頂けたらいいかと思います。
例を書きますと、ユーザ情報を登録するAPIを作るとした場合、以下のような形にします。
※この例ではユーザ情報がリソースにあたります。
https://(接続先)/user
この最後のuserの部分をリソース名にするということです。
これでuserというリソース(ユーザ情報)に対して何かします!のような書き方になります。
統一インターフェース:Uniform Interface
次に「②統一インターフェース:HTTPメソッドで追加、更新、取得、削除を設計する」です。
HTTPリクエストにはHTTPメソッドというものがあります。
この指定したメソッドによって処理を変えましょう!というルールです。
HTTPメソッドはたくさんありますが、基本的に使用するのは以下の4つです。
先ほどの①でuserというリソース(ユーザ情報)に対して何かします!を決めたと思います。
この何かをするというのをHTTPメソッドで設計するイメージです。
例えば以下のような感じです。
GETメソッド:ユーザ情報を取得
POSTメソッド:ユーザ情報を追加
PUTメソッド:ユーザ情報を更新
DELETEメソッド:ユーザ情報を削除
いかがでしょう?RESTのルールのイメージはわきましたでしょうか?
逆にRESTのルールに反した設計は以下になります。
https://(接続先)/getuser :ユーザ情報を取得
https://(接続先)/createuser :ユーザ情報を追加
https://(接続先)/updateuser :ユーザ情報を更新
https://(接続先)/deleteuser :ユーザ情報を削除
どうでしょう?違いがわかりますでしょうか?
HTTPメソッドで処理を変えずにURIで処理を分けている形です。
これはRESTではなく、ただのWeb APIになります。
ステートレス性:Stateless
続いて、「③ステートレスであること」です。
これに関しては少しイメージしにくいかもしれませんが、クライアントからリクエストしたユーザごとで状態を保持した作りにしないことです。
これにより、同じリクエスト情報でAPIを呼び出したときは誰でも同じ情報をサーバからもらえるといった感じです。
もし、ユーザごとに情報を保持し同じAPIを実行しているのに処理の内容が変わってしまうのはRESTでないということになります。
状態を保持しない!と覚えてください。
接続性:Connectability
最後に「④HTML、XMLどのハイパーメディアの使用すること」です。
少し分かりにくいかもしれませんが、情報にハイパーリンクを保持することができ、別の情報へアクセスできることを指します。
とはいえ、基本的にやりとりするデータにHTMLやXML、もしくはJSONデータであれば、リンク情報を含めることができるので、これらのデータフォーマットを使用しておけば問題ないかと思います。
最後に
いかかでしたでしょうか。
極力、例を出して表現してみましたが、理解できましたでしょうか?
WEBエンジニアを目指されている方は、REST APIは知っておいたほうがいいかと思います。
何かしら案件に携わる際に話に出る可能性が高いです。
後、このREST APIでやり取りするデータの形式として、よくJSONフォーマットが多いです。
もし、JSONに馴染みがない場合はこちらも勉強しておくと良いと思います。
以下の記事でもJSONについて記載していますので良ければ参考にしてもらえればと思います。
https://sasasorato.com/javascript-parse-stringify/
もう少し詳しく学びたい場合は包括的に知識を得ることができる本で学習するのもいいですね。
コメント