一、爲什麼選擇Node.js構建API?

Node.js是基於Chrome V8引擎的JavaScript運行環境,它的非阻塞I/O和單線程模型使其特別適合構建高併發的網絡服務。對於RESTful API(一種遵循REST風格的API設計規範),Node.js配合輕量級框架如Express,可以快速實現簡單高效的後端服務,非常適合初學者入門。

二、準備工作:安裝Node.js和Express

首先確保你的電腦已安裝Node.js(推薦LTS版本),可以通過nodejs官網下載安裝。安裝完成後,打開終端執行以下命令驗證:

node -v  # 顯示Node.js版本號
npm -v   # 顯示npm版本號

接下來,創建一個項目文件夾並初始化:

mkdir node-api-demo
cd node-api-demo
npm init -y  # 快速生成package.json文件

安裝Express框架(我們將用它處理路由和響應):

npm install express

三、Express基礎:創建第一個路由

Express是一個簡潔的Web框架,核心功能是處理HTTP請求和返回響應。創建一個app.js文件,編寫以下代碼:

// 引入Express模塊
const express = require('express');
// 創建Express應用實例
const app = express();
// 定義端口號(可自定義,如3000)
const PORT = 3000;

// 使用中間件:解析JSON格式的請求體(必須在路由定義前調用)
app.use(express.json());

// 定義路由:處理GET請求(獲取資源)
app.get('/', (req, res) => {
  // req: 請求對象,包含請求信息(如參數、頭信息等)
  // res: 響應對象,用於返回數據給客戶端
  res.status(200).json({ 
    message: '歡迎使用Node.js RESTful API', 
    version: '1.0.0' 
  });
});

// 啓動服務器
app.listen(PORT, () => {
  console.log(`服務器運行在 http://localhost:${PORT}`);
});

代碼解釋
- app.get():處理GET請求,第一個參數是請求路徑('/'表示根路徑),第二個參數是回調函數,接收req(請求)和res(響應)對象。
- res.status(200):設置HTTP狀態碼爲200(表示請求成功),res.json():返回JSON格式數據(比res.send()更規範,適合API)。
- express.json():中間件,用於解析客戶端發送的JSON格式請求體(如POST/PUT請求)。

四、處理不同HTTP方法

RESTful API通過不同HTTP方法表達不同操作,常見的有GET(獲取)、POST(創建)、PUT(更新)、DELETE(刪除)。我們繼續在app.js中添加示例路由:

1. GET請求:獲取資源

// 模擬用戶數據(實際項目中可連接數據庫)
const users = [
  { id: 1, name: 'Alice', age: 25 },
  { id: 2, name: 'Bob', age: 30 }
];

// 獲取所有用戶
app.get('/users', (req, res) => {
  res.status(200).json({
    success: true,
    data: users
  });
});

// 獲取單個用戶(通過路由參數)
app.get('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id); // 將參數轉爲數字
  const user = users.find(u => u.id === userId);

  if (user) {
    res.status(200).json({ success: true, data: user });
  } else {
    res.status(404).json({ success: false, message: '用戶不存在' });
  }
});

路由參數/users/:id中的:id是動態參數,通過req.params.id獲取,可用於獲取單個資源(如用戶ID)。

2. POST請求:創建資源

// 創建新用戶(需解析請求體,已通過express.json()中間件實現)
app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1, // 簡單生成ID
    name: req.body.name,  // 從請求體獲取name參數
    age: req.body.age
  };

  // 驗證請求體是否包含必要參數
  if (!newUser.name || !newUser.age) {
    return res.status(400).json({ 
      success: false, 
      message: 'name和age爲必填參數' 
    });
  }

  users.push(newUser);
  res.status(201).json({  // 201表示“創建成功”
    success: true,
    data: newUser
  });
});

注意POST請求需客戶端發送JSON數據(如{ "name": "Charlie", "age": 28 }),並通過req.body獲取數據。

3. PUT請求:更新資源

// 更新用戶信息
app.put('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const index = users.findIndex(u => u.id === userId);

  if (index === -1) {
    return res.status(404).json({ success: false, message: '用戶不存在' });
  }

  // 更新用戶信息(合併請求體參數到原用戶數據)
  users[index] = { ...users[index], ...req.body };
  res.status(200).json({ success: true, data: users[index] });
});

4. DELETE請求:刪除資源

// 刪除用戶
app.delete('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const initialLength = users.length;
  // 過濾掉指定ID的用戶
  const newUsers = users.filter(u => u.id !== userId);

  if (newUsers.length === initialLength) {
    return res.status(404).json({ success: false, message: '用戶不存在' });
  }

  // 更新用戶列表
  users.length = 0;
  users.push(...newUsers);
  res.status(200).json({ success: true, message: '用戶已刪除' });
});

五、處理404和通用響應

當客戶端請求不存在的路徑時,Express默認不會返回404,需要手動處理:

// 404處理:所有未匹配路由都會進入此處
app.use((req, res) => {
  res.status(404).json({ success: false, message: `路徑 ${req.originalUrl} 不存在` });
});

六、路由模塊化(進階)

當項目規模增大時,路由會越來越多,建議按功能拆分到不同文件(如routes/users.js),主文件引入:

1. 創建路由文件 routes/users.js

const express = require('express');
const router = express.Router(); // 創建路由實例

// 這裏寫/users相關路由(與前面app.js中的/users路由一致)
router.get('/', (req, res) => { /* ... */ });
router.post('/', (req, res) => { /* ... */ });

module.exports = router;

2. 在主文件 app.js 中引入

const userRoutes = require('./routes/users');
app.use('/users', userRoutes); // 將/users路徑與路由文件關聯

七、測試你的API

啓動服務器:

node app.js

使用工具測試API(推薦Postman或curl):
- GET /:訪問 http://localhost:3000,查看歡迎信息。
- GET /users:獲取用戶列表。
- POST /users:發送JSON請求體({ "name": "Charlie", "age": 28 }),創建新用戶。
- GET /users/1:獲取ID爲1的用戶信息。

總結

通過本文,你已經掌握了Node.js構建RESTful API的核心技能:
1. 使用Express框架快速創建服務
2. 定義不同HTTP方法的路由(GET/POST/PUT/DELETE)
3. 處理請求參數(路徑參數、請求體)和返回響應
4. 處理錯誤狀態碼(404、400等)和響應內容
5. 路由模塊化設計(進階)

接下來可以嘗試連接數據庫(如MongoDB、MySQL),將模擬數據替換爲真實數據,逐步完善你的API功能!

小夜