Node.js - RESTful API

你好,有志的程式設計師們!今天,我們將踏上一段令人興奮的旅程,進入Node.js和RESTful API的世界。別擔心這些術語現在聽起來像外星語言——在本教程結束時,你將能夠流利地說「REST」!?

Node.js - RESTFul API

REST架構是什麼?

REST,或稱代表性狀態轉移,就像一套規則,規定計算機應該如何在互聯網上相互交談。想像你在一間餐廳裡。你(客戶)請服務生(API)拿菜單(數據)。服務生不會自己烹飪食物,而是去廚房(伺服器)拿你需要的東西。這種往返過程與REST的工作原理相似!

REST的關鍵原則:

  1. 客戶-伺服器:在用戶界面和數據存儲之間進行關注點分離。
  2. 無狀態:客戶發出的每個請求必須包含理解請求所需的所有信息。
  3. 可緩存:響應必須定義自己是否可緩存。
  4. 統一接口:與伺服器交互的標準化方式。
  5. 分層系統:客戶無法區分它是直接連接到伺服器還是連接到中介。

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用於管理圖書館。讓我們分解一下:

  1. 我們使用app.get()來處理GET請求,既可以獲取所有圖書,也可以根據ID獲取特定圖書。
  2. app.post()處理創建新圖書的請求。
  3. app.put()允許我們更新現有的圖書。
  4. 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