REST APIについて

## ✅ そもそもWebって何？

### ● ざっくり言うと
> Webとは「パソコンやスマホ（クライアント）」と「情報を持っているサーバー」がやり取りする仕組みです。

### ● 実際の流れ（例：YouTubeを開くとき）
1. Chrome（クライアント）が「YouTube見せて」とサーバーにお願い
2. YouTubeのサーバーが「はいよ、これHTMLと動画データね！」と返す
3. Chromeがそれを受け取り、ページを表示してくれる

---

## 🛠 Webを支える技術

| 技術          | なにしてる？           | 具体例                                        |
| ----------- | ---------------- | ------------------------------------------ |
| HTTP        | 情報のやり取りルール（言語）   | Webページを取得する仕組み                             |
| HTML/CSS/JS | ページの構造・見た目・動きを作る | ブログ、ショッピングサイトなど                            |
| URL         | Web上の住所          | [https://example.com](https://example.com) |
| Webサーバー     | 情報を提供する側         | Apache、Nginxなど                             |
| ブラウザ        | Webページを表示する側     | Chrome, Safari など                          |

---

## 🌍 WebサイトとWebサービスの違い

| 種類      | 内容              | 例                      |
| ------- | --------------- | ---------------------- |
| Webサイト  | 読むだけ。情報提供が目的    | Wikipedia、ブログなど        |
| Webサービス | 操作する・使う。課題解決が目的 | Amazon、YouTube、Gmailなど |

---

## 🔗 APIとは？WebAPIとは？

### ● APIとは

アプリやサービス同士が「情報ちょうだい！」「これやって！」と話すための仕組みです。

* **API = Application Programming Interface**
* Interface：つなぐ仕組み（人ではなく機械同士の会話）

### ● WebAPIとは

* Web（インターネット）を通じて使うAPI
* 人ではなく**プログラムが使うWeb**
* HTMLではなく**JSON**でやり取りされる

### 📌 たとえば…

* Google Maps APIを使えば、アプリに地図を表示できる
* Twitter APIを使えば、アプリからツイート一覧を取得できる

---

## 🚀 WebAPIのメリット

* 他の人（開発者）が自分のサービスを拡張してくれる
* → 「APIエコノミー（APIを使った成長）」

### 実例：Twitter

* WebAPIを公開
* サードパーティ製アプリがどんどん便利に
* 利用者もどんどん増加！

---

## ⚠ WebAPI公開のリスクと対策

| リスク    | 内容               | 対策・実例              |
| ------ | ---------------- | ------------------ |
| 収益の損失  | 非公式アプリにユーザーが流れる  | TweetbotなどにAPI制限   |
| サーバー負荷 | アクセス集中           | GitHub APIにレート制限導入 |
| 不正利用   | 偽物アプリで誤情報・ブランド低下 | APIキー＋不正遮断＋利用規約整備  |

---

## 📡 HTTP通信の中身

### ● リクエスト（クライアント → サーバー）

~~~
リクエストライン：HTTPメソッド、URI、HTTPバージョンを記載しサーバーへの指示を送る

POST /users HTTP/1.1


ヘッダー：サーバーに対する追加情報(メタ情報)を送信
Host: api.example.com
Content-Type: application/json
Authorization: Bearer xyz

ボディ：サーバーに送りたい「実データ」
{
  "name": "Taro",
  "age": 20
}      
~~~

* POST: データ登録
* GET: データ取得
* PUT: データ更新
* DELETE: データ削除

### ● レスポンス（サーバー → クライアント）

~~~
ステータスリンク：リクエストの処理結果を示す
HTTP/1.1 200 OK


ヘッダー：メタ情報（データの形式や長さなど）
Content-Type: application/json
Content-Length: 48
Date: Mon, 27 May 2025


ボディ：リクエストに返す実際のデータ（HTML, JSONなど）
{ "id": 1, "title": "映画タイトル" }
~~~

---

## 🛡 RESTの原則

RESTとは「Webの仕組みに沿った設計スタイル」で、以下の6つの原則を守ることが重要です。

### 1. クライアント/サーバー

* 役割を分離（UIとデータ処理を分ける）
* クライアントは表示と操作、サーバーは処理と返答

### 2. ステートレス（状態を保持しない）

* サーバーは「前回のリクエストの状態」を記憶しない
* すべてのリクエストは**自己完結**している必要がある

#### ✅ メリット

| メリット     | 内容               |
| -------- | ---------------- |
| スケーラビリティ | サーバーを追加しやすい      |
| シンプルな実装  | 状態を覚える必要がない      |
| 障害に強い    | 状態に依存しないので復元しやすい |

#### ✅ 実装方法

| 実践内容         | 説明               |
| ------------ | ---------------- |
| 認証情報を毎回送る    | JWTトークンやAPIキーを利用 |
| セッションを持たない   | クライアント側で状態を管理    |
| 必要なデータを毎回含める | 前の処理に依存させない      |

### 3. キャッシュ制御

* サーバーがデータの再利用を許可すれば、クライアントが保存して再表示できる
* ヘッダー：`Cache-Control`, `ETag`, `Last-Modified` などで管理

### 4. 統一インターフェース

「どのリソースも同じ操作ルールに従う」こと。

#### サブ原則

| 原則         | 内容                               |
| ---------- | -------------------------------- |
| リソースの識別    | URIで一意に識別する（例：/users/123）        |
| リソースの操作    | HTTPメソッドで行う（GET/POST/PUT/DELETE） |
| 自己記述的メッセージ | ヘッダーに必要な情報を含める（例：Content-Type）   |
| HATEOAS    | レスポンスに次のリンクを含めて状態遷移を促す           |

### 5. 階層化システム

* クライアントは中間サーバー（キャッシュ、ゲートウェイ）を意識しない
* ロードバランサーや認証層を挟むことでセキュリティとスケーラビリティ向上

### 6. コードオンデマンド（任意の原則）

* 必要に応じてサーバーからコードを配信し、クライアントがそれを実行
* 例：バリデーションロジックをJavaScriptで配信

---
### 最後に
今回の記事では、REST APIとは何かについてイメージをつかむことを目的に、概要を中心に解説しました。
ステータスコードなど、REST APIには他にも多くの重要な要素がありますが、まずは全体像を把握することが理解の第一歩になります。

REST APIの基本的な考え方をつかんでおくことで、今後学ぶ詳細な内容もスムーズに頭に入ってくるはずです。
ぜひ、参考として一読いただければ嬉しく思います。