今天要往「後端 API」更進一步:學習 REST API 的基本設計,並用 Express 實作最常見的 CRUD(新增、讀取、更新、刪除)。
因為內容蠻多,我把它分成上下兩天。今天先做 讀取 (GET) 和 新增 (POST)。
REST(Representational State Transfer)是一種設計 API 的風格。
它的核心精神是:
/todos
就代表「待辦事項資源」常見的設計方式:
動作 | HTTP 方法 | 路由 | 說明 |
---|---|---|---|
讀取所有 | GET | /todos |
取得所有待辦事項 |
新增一個 | POST | /todos |
新增一筆待辦事項 |
更新一個 | PUT | /todos/:id |
修改指定的待辦事項 |
刪除一個 | DELETE | /todos/:id |
刪除指定的待辦事項 |
我先建立一個新專案資料夾:
mkdir todo-api
cd todo-api
npm init -y
npm install express
我用一個陣列來暫存待辦事項,先不用資料庫。
import express from "express";
const app = express();
const port = 3000;
// 讓 Express 讀取 JSON body
app.use(express.json());
// 假資料
let todos = [
{ id: 1, task: "學 Node.js", done: false },
{ id: 2, task: "寫鐵人賽文章", done: true }
];
// 1. GET /todos – 取得所有待辦事項
app.get("/todos", (req, res) => {
res.json(todos);
});
// 2. POST /todos – 新增一個待辦事項
app.post("/todos", (req, res) => {
const { task } = req.body;
if (!task) {
return res.status(400).json({ error: "task 欄位必填" });
}
const newTodo = {
id: todos.length + 1,
task,
done: false
};
todos.push(newTodo);
res.status(201).json(newTodo);
});
// 啟動伺服器
app.listen(port, () => {
console.log(`伺服器已啟動:http://localhost:${port}`);
});
我用 Postman 或 curl 來測試:
curl http://localhost:3000/todos
輸出:
[
{ "id": 1, "task": "學 Node.js", "done": false },
{ "id": 2, "task": "寫鐵人賽文章", "done": true }
]
curl -X POST http://localhost:3000/todos \
-H "Content-Type: application/json" \
-d '{"task": "整理筆記"}'
輸出:
{ "id": 3, "task": "整理筆記", "done": false }
今天算是第一次實作 真正的 API。
雖然只是用陣列暫存資料,但已經能透過 GET
和 POST
來操作。
寫完之後我有一種「自己真的在做後端」的感覺。
最大的收穫:
app.use(express.json())
)