この記事はプログラミング初学者が学習した内容を自分なりにまとめた記事です。
REST APIとは
RESTfulなAPIを意味する。
APIとは Application Programming Interface
あるサービスをサービス提供者以外の人が自分が制作するサービスの一環として使用できるようにした仕組み(インターフェース)のこと。本来であれば必要なプログラムを組む必要があるが、APIを利用することでプログラムを組まずに機能を利用することができる。
WebAPIとは
一般的なAPIの場合、APIを利用するにはAPI提供者が用意しているインターフェースを利用して機能を使う。例:Windows API など
WebAPIでは、HTTP/HTTPS通信を使って必要な機能を取り込むことができる。
昨今ではAPIというとWebAPIを指していることが多い。
RESTfulとは
REST(設計ルール)でもとめられる原則に従っていることを意味する。
REST6原則
1,クライアント/サーバー
クライアントからリクエストしてサーバーからレスポンス
画面(UI)とデータで関心事を分離
クライアンド側がトリガー、サーバー側は受け身の姿勢
2,ステートレス
前の状態を保存しないでそれぞれの会話が独立して成立
サーバーは一つのリクエストだけで内容を理解できる
サーバーに保存されたリクエストは使わない(サーバーセッションは使わない)。
必要な情報はクライアント上に保存される(リクエストに含める)。
メリット:単一のリクエスト以外見る必要がないので、監視が容易
障害発生した一つのリクエストだけを回復すれば良いので、障害復旧が容易
リクエスト全体でサーバーリソースを共有する必要がないので、スケールが容易
デメリット:単一のリクエストで完結させるため、リクエストデータに重複がある
アプリを複数のバージョン同時提供し、状態をクライアントに置いておくとアプリ制御が複雑
参考
ステートフル:前の状態を保存。前のやりとりと次のやりとりが関連している。
3,キャッシュ制御
クライアント側でレスポンスをキャッシュできるようにする
レスポンスは明示的または暗黙的にキャッシュ可能
キャッシュを適切に行う事でクライアント/サーバー間の通信が排除され、ユーザー体験の向上、リソース効率の向上、拡張性の向上が見込める
キャッシュを適切に行えば、必要な情報だけリクエストすればよくなる
メリット:ユーザー体験の向上(レスポンスが早いので)、サーバーの負荷軽減
デメリット:古いデータを使用してしまうとシステムに対する信頼性の低下につながる
4,統一インターフェース
4つの制約で成り立つ
①リソースの識別
リソースは名前が付けられるあらゆるもの、サーバー側にあるデータ
URIを用いてサーバーに保存されたデータを識別する
名前が付けられるあらゆるものがリソース
例;ドキュメント、画像、人、情報、サービス、状態
※抽象的な定義も含む
4/1の天気、最新(今日の天気)
また、URIはリソースを識別するものであり、 動詞は含まない
②表現を用いたリソース操作
表現とはリソース(サーバーに保持されたデータ)のとある断面を表す。
例:クライアントへ返されるレスポンスやサーバーへPOSTするデータを表現という
断面情報を利用してサーバー上のデータを操作することが表現を用いたリソース操作となる。
クライアントからサーバーへ編集リクエストをする際、認証情報などの追加情報を付与するようなメタデータも表現を用いたリソース操作では含めて考える。
③自己記述メッセージ
自己記述とはデータ自身がデータの中身を説明している
メッセージとはサーバーへリクエストするデータやクライアントへレスポンスするデータを言う
メッセージ内容が何であるか、ヘッダーに記述されていることが自己記述メッセージを意味する。
例:レスポンスに含まれるメタ情報(ヘッダー情報)で内容がどのようなものか分かる
④アプリケーション状態エンジンとしてのハイパーメディア(HATEOS)
レスポンスに現在の状態を踏まえて関連するハイパーリンクが含まれている
例:検索結果ページにおける「次のページ」
統一インターフェースに関するメリット、デメリット
メリット:システムアーキテクチャ全体が簡素化されて分かりやすくなる。提供するサービスに集中でき、独自の進化ができる。インターフェース(取り決め)が決まっていれば、異なるブラウザでも同じような画面を表示できる。
デメリット:標準化によって効率が犠牲になる
冗長ではあるが、標準化することで理解しやすい構成をとっているのが統一インターフェース
5、階層化システム
Web AP DB のようにシステムをいくつかの階層に分離する考え方
各サーバーをコンポーネントと呼ぶ
メリット:各システムに役割を決めて独立させることで進化と再利用がで促進できる
デメリット:データ処理にシステムなどへ負荷がかかったりするオーバーヘッドが発生する。ユーザーから見ると応答が悪く見える。キャッシュを利用すると改善が見込める
6、コードオンデマンド
クライアント側でコードをダウンロードして実行できる
サービスをリリースした後にクライアントのコードを変更できる
サーバー側を変更すればクライアントに反映される
メリット:リリース済みのクライアントに対してサーバー主導で機能追加できる
サーバー側の負荷が下がる(クライアント側に処理を移譲できるため)
デメリット:評価環境が複雑になる(多数のブラウザなど...) safari, chrome, IEなど
CRUD操作のURI, HTTPメソッドの関連表とサンプルURI
URIの例 | 操作 | HTTTP method | 意味 |
---|---|---|---|
https://www.sample.com/users | Read | GET | 読込み(一覧) |
https://www.sample.com/users | Create | POST,PUT | 作成 |
https://www.sample.com/users/12345 | Read | GET | 読込み(個別) |
https://www.sample.com/users/12345 | Update | PUT | 更新 |
https://www.sample.com/users/12345 | Delete | DELETE | 削除 |