REST APIとは
REST API(Representational State Transfer Application Programming Interface)は、クライアントとサーバー間の通信を可能にするアーキテクチャスタイルの一つです。REST APIは、HTTPプロトコルを使用してデータを送受信し、リソース(例: データや機能)を操作するための一般的な手法を提供します。
REST原則
設計設定には以下のものがあります
クライアント/サーバー
- 画面(UI)とデータで関心事を分離
- クライアント側がトリガー、サーバー側が受け身
階層化システム
- 多層アーキテクチャ構成
- メリット
- コンポーネントに役割を決めて独立させることで進化と再利用がそくしんできる
- デメリット
- データ処理時にオーバーヘッドが発生するのでユーザーから見ると応答が悪く見える
コードオンデマンド
- クライアントコードをダウンロードして実行できる
- メリット
- リリース済みのクライアントに対して機能追加ができる
- サーバーの負荷が下がる
- デメリット
* 多数のブラウザなど評価環境が複雑になる
統一インターフェース
- メリット
- システムアーキテクチャ全体が簡素化されてわかりやすくなる
- 提供するサービスに集中でき独自の進化ができる
- 異なるブラウザでも同じような画面を表現できる
- デメリット
- 標準化によって効率が犠牲になる
リソース(名前がつけられるあらゆるもの)の識別
- URIを用いてサーバーに保存されたデータを識別する
- URIに動作は含まない
表現を用いたリソース操作
- 断面情報を利用してサーバー上のデータを操作する
自己記述メッセージ
- メッセージ内容が何であるか、ヘッダーに記述されている
HATEOS
- 検索結果ページにおける次のページ
ステートレス
- 前の状態を保存しない
- それぞれの会話が単独で成り立つ
- サーバーはリクエストだけでコンテキストを理解できる
- メリット
- 監視が容易
- 障害復旧が容易
- スケールが容易
- デメリット
- リクエストデータに重複がある
- アプリを複数バージョン同時ていきょうし、状態をクライアントに置いておくとアプリ制御が複雑になる
キャッシュ制御
- クライアントはレスポンスをキャッシュできる
- メリット
- ユーザー体験の向上
- リソース効率の向上
- 拡張性の向上
- デメリット
- 古いデータを戻してしまうとシステムに対する信用性の低下につながる
URI設計
URI(Uniform Resource Identifier)を設計する際に考慮すべき主要な要素は以下の通りです
1. リソースの識別性
URIは一意のリソースを識別するためのものでなければなりません。リソースの識別性を確保することで、クライアントが正確なリソースにアクセスできます。
例: /movies/{movie_id}
2. リソース階層の表現
リソースが階層的に組織されている場合、URIにその階層構造を反映することが重要です。これにより、リソースの関係性や階層構造を理解しやすくなります。
例: /genres/{genre_id}/movies/{movie_id}
3. クエリパラメータの利用
URIに含まれるパラメータは、リソースのフィルタリングやページネーションなどの目的で使用されます。必要な場合には、クエリパラメータを使用してリクエストを細かく制御できます。
例: /movies?genre=action&year=2022&page=1
4. RESTfulな命名規則の遵守
URIはRESTfulな命名規則に従って命名されるべきです。リソースの名前付けや操作の表現には、一貫性が重要です。
例: /movies(複数形)、GET /movies/{movie_id}(リソースの取得)
5. ユーザーフレンドリーな設計
URIは理解しやすく、記憶しやすい形式で設計する必要があります。また、冗長性を避け、シンプルで直感的な命名を心がけると良いでしょう。
例: /movies/{movie_id}(映画の一意の識別子を含む)
これらの要素を考慮して、URIを設計することで、システムの可読性、保守性、拡張性が向上し、クライアントとサーバー間の通信が効率的に行われます。
REST APIで使われるHTTPメソッド
REST APIで映画(movie)をリソースとしてCRUD操作を行うためのURIとHTTPメソッドの定義です
URI | HTTPメソッド | 内容 |
---|---|---|
/movies | GET | 映画一覧取得 |
/movies | POST | 新しい映画の追加 |
/movies/{movie_id} | GET | 特定の映画情報取得 |
/movies/{movie_id} | PUT | 映画情報の更新 |
/movies/{movie_id} | DELETE | 映画の削除 |
{movie_id}は映画の一意の識別子です。