API 是什麼?
想像你走進一間餐廳。
你(前端)坐下來看菜單,選好要吃什麼。
服務生(API)把你的訂單送到廚房(後端)。
廚房做好菜之後,服務生再端回來給你。
你不需要知道廚房怎麼煮,也不用進去廚房。
你只需要知道:菜單上有什麼、怎麼點、點了之後會得到什麼。
你(前端)坐下來看菜單,選好要吃什麼。
服務生(API)把你的訂單送到廚房(後端)。
廚房做好菜之後,服務生再端回來給你。
你不需要知道廚房怎麼煮,也不用進去廚房。
你只需要知道:菜單上有什麼、怎麼點、點了之後會得到什麼。
API 的全名是 Application Programming Interface,翻成中文就是「程式之間的溝通介面」。
簡單說:
- 前端(你看到的網頁)想要資料 → 跟 API 說「我要 XXX」
- API 把請求送到後端 → 後端處理完 → 再透過 API 回傳結果
- 前端收到結果 → 顯示在畫面上
為什麼要知道這個?
當你跟 Claude Code 說「幫我做一個客戶管理系統」,它會幫你建 API。你看到 GET /api/customers 這種東西時,就知道這是「去拿客戶列表」的意思,而不是一臉問號。
API 的角色定位
沒有 API 的世界
前端直接連資料庫
→ 安全漏洞大開
→ 每個頁面自己寫查詢邏輯
→ 改一個欄位,10 個頁面都要改
→ 手機 App 跟網頁各寫一套
→ 安全漏洞大開
→ 每個頁面自己寫查詢邏輯
→ 改一個欄位,10 個頁面都要改
→ 手機 App 跟網頁各寫一套
有 API 的世界
前端只跟 API 溝通
→ API 統一管理權限和驗證
→ 邏輯集中在一個地方
→ 改一次,全部生效
→ 手機 / 網頁 / 第三方都用同一組 API
→ API 統一管理權限和驗證
→ 邏輯集中在一個地方
→ 改一次,全部生效
→ 手機 / 網頁 / 第三方都用同一組 API
HTTP Methods(點菜的方式)
既然 API 是「服務生」,那你跟服務生講話時,有幾種不同的「動作」。這些動作在技術上叫做 HTTP Methods(HTTP 方法)。
| 方法 | 白話 | 餐廳比喻 | 實際例子 |
|---|---|---|---|
GET |
「我要看」 | 看菜單 / 查目前的訂單 | 打開商品頁面、查訂單紀錄 |
POST |
「我要新增」 | 下一筆新訂單 | 註冊帳號、送出表單、新增一筆資料 |
PUT |
「我要整個換掉」 | 整張訂單重寫 | 更新個人資料(全部欄位都重新送) |
PATCH |
「我要改一部分」 | 只改訂單裡的一道菜 | 只改密碼、只改暱稱 |
DELETE |
「我要刪掉」 | 取消訂單 | 刪除帳號、移除商品 |
PUT vs PATCH 差在哪?
PUT 像是把整張考卷擦掉重寫。就算你只改一題,也要把所有答案都重填一遍。PATCH 像是用立可白只修一題。其他題目維持原樣。
實務上大部分系統用
PATCH 比較多,因為「只改一個欄位」的需求比「整個重送」常見得多。
狀態碼(服務生的回覆)
你跟 API 說「我要 XXX」之後,API 會回一個數字代碼告訴你結果。這就是 HTTP 狀態碼。
不用背,但看到的時候要知道什麼意思:
成功的回覆(2xx)
| 代碼 | 白話 | 餐廳比喻 |
|---|---|---|
200 |
成功,資料來了 | 「好的,菜來了」 |
201 |
建立成功 | 「訂單已成立,等候出餐」 |
你的問題(4xx)
| 代碼 | 白話 | 餐廳比喻 |
|---|---|---|
400 |
你的要求有問題 | 「菜單上沒這道菜」「你的格式不對」 |
401 |
沒有登入 | 「請先出示會員卡」 |
403 |
沒有權限 | 「VIP 專屬區域,你進不去」 |
404 |
找不到 | 「那道菜已經下架了」 |
伺服器的問題(5xx)
| 代碼 | 白話 | 餐廳比喻 |
|---|---|---|
500 |
伺服器壞了 | 「廚房失火了,我們也沒辦法」 |
記住這個規則
4xx = 你的問題(請求格式錯、沒登入、沒權限)5xx = 伺服器的問題(後端程式炸了、資料庫掛了)
看到 4xx 先檢查自己;看到 5xx 去找後端工程師。
實際案例:一個「客戶管理」的完整流程
假設你請 Claude Code 幫你做一個客戶管理系統,它會建出以下這些 API。我們來走一遍完整流程:
1. 新增客戶(POST)
使用者在前端填好表單(姓名、電話、Email),按下「送出」。
POST /api/customers
送出的資料(Request Body):
{
"name": "王小明",
"phone": "0912-345-678",
"email": "ming@example.com"
}
送出的資料(Request Body):
{
"name": "王小明",
"phone": "0912-345-678",
"email": "ming@example.com"
}
後端收到 → 存進資料庫 → 回傳:
狀態碼:201 Created
回傳的資料(Response):
{
"id": 123,
"name": "王小明",
"phone": "0912-345-678",
"email": "ming@example.com",
"created_at": "2026-03-28T10:30:00Z"
}
回傳的資料(Response):
{
"id": 123,
"name": "王小明",
"phone": "0912-345-678",
"email": "ming@example.com",
"created_at": "2026-03-28T10:30:00Z"
}
前端收到 201 → 顯示「新增成功!」
2. 列出所有客戶(GET)
GET /api/customers
狀態碼:200 OK
回傳:
[
{ "id": 123, "name": "王小明", "phone": "0912-345-678" },
{ "id": 124, "name": "李大華", "phone": "0933-456-789" },
{ "id": 125, "name": "張美玲", "phone": "0955-567-890" }
]
狀態碼:200 OK
回傳:
[
{ "id": 123, "name": "王小明", "phone": "0912-345-678" },
{ "id": 124, "name": "李大華", "phone": "0933-456-789" },
{ "id": 125, "name": "張美玲", "phone": "0955-567-890" }
]
前端收到資料 → 渲染成表格顯示在頁面上。
3. 查看單一客戶(GET + ID)
GET /api/customers/123
狀態碼:200 OK
回傳:王小明的完整資料
狀態碼:200 OK
回傳:王小明的完整資料
4. 修改客戶資料(PATCH)
王小明換了電話號碼,只要改這個欄位:
PATCH /api/customers/123
送出的資料:
{
"phone": "0987-654-321"
}
狀態碼:200 OK
→ 只有電話被改掉,其他欄位不動
送出的資料:
{
"phone": "0987-654-321"
}
狀態碼:200 OK
→ 只有電話被改掉,其他欄位不動
5. 刪除客戶(DELETE)
DELETE /api/customers/123
狀態碼:200 OK
→ 王小明的資料被刪除了
狀態碼:200 OK
→ 王小明的資料被刪除了
整理一下
看出規律了嗎?同一個路徑 /api/customers,搭配不同的 HTTP Method,就能做不同的事:
GET /api/customers→ 看全部GET /api/customers/123→ 看一個POST /api/customers→ 新增PATCH /api/customers/123→ 改一個DELETE /api/customers/123→ 刪一個
API 組合排列的概念(RESTful)
上面那種「用 HTTP Method + 路徑」來操作資源的設計方式,有一個正式的名字叫做 RESTful API。
RESTful 命名慣例
好的 API 設計有一些約定俗成的規則:
| 規則 | 好的例子 | 不好的例子 |
|---|---|---|
| 用名詞,不用動詞 | /api/customers |
/api/getCustomers |
| 用複數 | /api/orders |
/api/order |
| 巢狀表示關聯 | /api/customers/123/orders |
/api/getOrdersByCustomer?id=123 |
| 版本號放前面 | /api/v1/customers |
/api/customers?version=1 |
Endpoint 怎麼看
當你看到一個 API 路徑,可以像看地址一樣來拆解:
/api/v1/users/123/orders
拆解:
├── /api → 表示這是 API(不是一般網頁)
├── /v1 → 版本 1
├── /users → 資源類型:使用者
├── /123 → 特定使用者(ID = 123)
└── /orders → 這個使用者的訂單
拆解:
├── /api → 表示這是 API(不是一般網頁)
├── /v1 → 版本 1
├── /users → 資源類型:使用者
├── /123 → 特定使用者(ID = 123)
└── /orders → 這個使用者的訂單
白話翻譯:「API 版本 1,去找 ID 為 123 的使用者,然後拿他的訂單」
再多幾個例子:
GET /api/v1/products → 拿所有商品列表POST /api/v1/products → 新增一個商品GET /api/v1/products/456/reviews → 看商品 456 的所有評價DELETE /api/v1/users/123/orders/789 → 刪掉使用者 123 的訂單 789
跟 Claude Code 的關係
當你對 Claude Code 說:
不知道 API 概念
「幫我做一個可以新增客戶
的功能,然後還要能查詢
跟刪除」
的功能,然後還要能查詢
跟刪除」
知道 API 概念
「幫我建 RESTful API:
POST/GET/PATCH/DELETE
/api/v1/customers
回傳 JSON,需要驗證」
POST/GET/PATCH/DELETE
/api/v1/customers
回傳 JSON,需要驗證」
右邊的指令更精準,Claude Code 產出的結果也會更符合你的期待。不需要你會寫程式碼,但知道這些「菜名」就能點對菜。
本章重點回顧
- API = 程式之間溝通的介面(服務生)
- HTTP Methods = 你要做什麼動作(GET 看 / POST 新增 / PATCH 改 / DELETE 刪)
- 狀態碼 = 服務生的回覆(200 成功 / 4xx 你的問題 / 5xx 伺服器的問題)
- RESTful = API 的命名規則(用名詞、用複數、巢狀表示關聯)
- Endpoint = API 的地址,像
/api/v1/users/123/orders