WEBの基礎
WEB APIとは?
- API = Application Programming Interface
- 異なるアプリケーションとアプリケーションが互いにプログラミングを通して機械的に通信してやり取りができるようにすること
- WEB APIを使うことでPCとスマホのどちらの環境でも簡単にサービスを展開することができる
WEB APIの種類
REST API ⇨ シンプル
- URLとメソッドでデータを扱うシンプルな仕組み
- 幅広い言語やツールでサポート
- 多くのWebサービスで最も一般的
- HTTPに測ったシンプル設計
GraphQL ⇨ 柔軟
- 1つのエンドポイントで完結
- 違う情報を効率よく取得できるが実装はやや複雑
- フロントエンドとサーバ間のやり取りを柔軟に最適化可能
gRPC ⇨ ハイパフォーマンス
- バイナリ形式で高速通信が可能
- 多言語間のデータ交換がしやすく高負荷分散システムにも強い
- 設定に手間はかかるがパフォーマンス重視の場面で力を発揮
HTTP
HTTPの基本
-
HTTPとは、「Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)」の略で、ウェブ上でデータをやり取りするための通信規約(ルール)のこと
-
HTTPプロトコルとは、Web上でデータがやり取りされる際のルールを定めたもの
REST API
REST APIとは?
- REST = WEBが大規模に機能する要因を整理した"設計ガイドライン"
REST の制約
-
クライアント・サーバ : クライアントとサーバを分離することで関心を分離する
※クライアントは見た目(UI)にサーバはデータの保存と操作にそれぞれ責任を持つ -
ステートレス : リクエストは、必要な全ての情報を含んでいる
-
統一インターフェース : ルールを統一することで異なるアーキテクチャ間の通信を簡単にする
-
キャッシュ : レスポンスは、キャッシュ可能かどうかを示す
-
階層化システム : 各コンポーネントは、隣接する階層以外のコンポーネントを『見る』ことができない
-
コードオンデマンド(任意) : クライアントで実行可能なコードがクライアントの機能拡張を可能にする
WEB APIの基本設計
リソース指向の考え方
メソッド エンドポイント(URI)
GET /repos/{owner}/{repo}/branches
HTTPメソッド
- GET:リソースを取得する
- POST:リソースを新規作成する
- PUT:リソースを更新する
- PATCH:リソースを部分的に更新する
- DELETE:リソースを削除する
エンドポイント設計
- エンドポイントは小文字の英字を使う
- エンドポイントに日本語は使わない
- 複数単語を繋げる場合、ハイフン繋ぎが無難
例) CATEGORIES
メソッド | エンドポイント | 説明 |
---|---|---|
GET | /categories | カテゴリ一覧を取得 |
POST | /categories | 新しいカテゴリを作成 (管理者用) |
GET | /categories/{categoryId} | カテゴリの詳細を取得 |
PUT | /categories/{categoryId} | カテゴリの詳細を編集 (管理者用) |
DELETE | /categories/{categoryId} | カテゴリの詳細を削除 (管理者用) |
GET | /categories/{categoryId}/products | 特定カテゴリに属する商品の一覧を取得 |
※リソースを一位に特定する際にはエンドポイントにIDを追加する
リクエスト・レスポンスのデータ設計
- リクエスト・レスポンスデータともにJSONフォーマットで統一する
- 1つのレンポンスデータに全部の情報を入れようとしない
STATUS CODEの設計
- 2XX : 成功
- 3XX : リダイレクト
- 4XX : クライアントエラー(リクエストに問題)
- 5XX : サーバーエラー(サーバーに問題)
WEB APIとキャッシュ
説明 | |
---|---|
max-age=<秒数> | キャッシュの有効期限を秒単位で指定 |
no-shote | キャッシュそのものを禁止 |
no-cache | キャッシュされるが、使用前に必ずサーバーで再検証を行う |
must-revalidate | キャッシュが期限切れの場合、必ずサーバーに再検証を要求する |
state-while-revalidate=<秒数> | キャッシュが期限切れの場合でも、再検証中にそのキャッシュを利用可能な秒数を指定 |
public | レスポンスを全てのキャッシュ(クライアント、プロシキ、CDNなど)で保存を可能にする |
private | レスポンスをクライアント専用にし、中間キャッシュ(プロシキ、CDN)では保存不可にする |
s-maxage | キャッシュの有効期限を秒単位で指定。中間キャッシュ向け |