Node.js - RESTful API
你好,有志的程式設計師們!今天,我們將踏上一段令人興奮的旅程,進入Node.js和RESTful API的世界。別擔心這些術語現在聽起來像外星語言——在本教程結束時,你將能夠流利地說「REST」!?
REST架構是什麼?
REST,或稱代表性狀態轉移,就像一套規則,規定計算機應該如何在互聯網上相互交談。想像你在一間餐廳裡。你(客戶)請服務生(API)拿菜單(數據)。服務生不會自己烹飪食物,而是去廚房(伺服器)拿你需要的東西。這種往返過程與REST的工作原理相似!
REST的關鍵原則:
- 客戶-伺服器:在用戶界面和數據存儲之間進行關注點分離。
- 無狀態:客戶發出的每個請求必須包含理解請求所需的所有信息。
- 可緩存:響應必須定義自己是否可緩存。
- 統一接口:與伺服器交互的標準化方式。
- 分層系統:客戶無法區分它是直接連接到伺服器還是連接到中介。
HTTP方法
現在,讓我們來討論HTTP方法。這些就像動詞,告訴伺服器要執行什麼操作。以下是一些主要的方法:
方法 | 描述 | 使用範例 |
---|---|---|
GET | 獲取數據 | 獲取用戶個人資料 |
POST | 創建新數據 | 添加新部落格文章 |
PUT | 更新現有數據 | 編輯用戶詳情 |
DELETE | 刪除數據 | 刪除一條推文 |
PATCH | 部分修改數據 | 只更新用戶的電子郵件 |
讓我們通過一些簡單的Node.js代碼示例來看看這些方法是如何工作的!
GET請求範例:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});
server.listen(3000, () => {
console.log('伺服器正在3000端口運行');
});
在這個範例中,我們創建了一個簡單的伺服器,當收到發往'/api/users'的GET請求時,會回應一個JSON用戶列表。當你運行這段代碼並在瀏覽器中訪問'http://localhost:3000/api/users'時,你將看到用戶列表!
POST請求範例:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('已添加新用戶:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: '用戶創建成功' }));
});
}
});
server.listen(3000, () => {
console.log('伺服器正在3000端口運行');
});
這個範例展示了如何處理添加新用戶的POST請求。它聽取進來的數據,處理它,並發送一個確認用戶已創建的回應。
RESTful Web服務
現在我們已經了解了基礎知識,讓我們深入創建一個完整的RESTful API,使用Express,一個流行的Node.js框架,它能讓構建Web應用程序和API變得非常簡單!
首先,讓我們安裝Express:
npm init -y
npm install express
現在,讓我們為圖書館創建一個簡單的RESTful API:
const express = require('express');
const app = express();
app.use(express.json());
let books = [
{ id: 1, title: '了不起的盖茨比', author: 'F. 斯科特·菲茨傑拉德' },
{ id: 2, title: '殺死一隻知更鳥', author: '哈珀·李' }
];
// GET所有圖書
app.get('/api/books', (req, res) => {
res.json(books);
});
// GET特定圖書
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('找不到圖書');
res.json(book);
});
// POST一本新書
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});
// PUT (更新) 一本圖書
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('找不到圖書');
book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});
// DELETE一本圖書
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('找不到圖書');
const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});
app.listen(3000, () => console.log('伺服器正在3000端口運行'));
這個範例創建了一個完整的RESTful API用於管理圖書館。讓我們分解一下:
- 我們使用
app.get()
來處理GET請求,既可以獲取所有圖書,也可以根據ID獲取特定圖書。 -
app.post()
處理創建新圖書的請求。 -
app.put()
允許我們更新現有的圖書。 -
app.delete()
讓我們從圖書館中刪除圖書。
每個路徑都遵循RESTful原則,使用恰當的HTTP方法和狀態碼。
測試您的API
要測試您的API,您可以使用Postman或curl等工具。以下是一個使用curl的範例:
# GET所有圖書
curl http://localhost:3000/api/books
# POST一本新書
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"喬治·奧威爾"}' http://localhost:3000/api/books
# PUT (更新) 一本圖書
curl -X PUT -H "Content-Type: application/json" -d '{"title":"更新後的標題","author":"更新後的作者"}' http://localhost:3000/api/books/1
# DELETE一本圖書
curl -X DELETE http://localhost:3000/api/books/1
就这样!您刚刚使用Node.js和Express创建了自己的第一个RESTful API。記住,熟能生巧。嘗試為您的圖書館API添加更多功能,例如搜索圖書或根據不同標準對圖書進行排序。
构建API就像在不同的软件应用程序之间构建一座桥梁。您创建的每个API都在为程序之间的交互和数据共享开辟新的可能性。继续探索,继续编码,最重要的是,在成为Node.js专家的道路上享受乐趣!
Credits: Image by storyset