简介:半小时内实现 REST API — 这是真的
REST API 是现代网络交互的基础。无论你是想了解后端的前端开发者,还是想快速创建第一个服务器的新手,本指南都适合你。我们将讲解如何用 JavaScript (Node.js) 在短短 30 分钟内编写一个完整的 REST API。
我们使用最精简的技术栈:Node.js 和 Express.js — 创建 API 最流行的框架。没有多余的代码,只有实践。到文章结束时,你将拥有一个具备 CRUD 操作(创建、读取、更新、删除)的工作服务器。
步骤 1:准备和安装依赖
首先确保你已安装 Node.js(版本 14 或更高)。可以从官方网站下载。检查安装情况:
node -v
npm -v
创建一个项目文件夹并进入:
mkdir my-rest-api
cd my-rest-api
初始化项目并安装 Express:
npm init -y
npm install express
为了方便,安装 nodemon — 它会在代码更改时自动重启服务器:
npm install --save-dev nodemon
现在打开 package.json 并将 "scripts" 部分替换为:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
太好了!一切准备就绪,可以开始编写代码了。
步骤 2:编写基础服务器和第一个端点
在项目根目录创建文件 index.js。从导入 Express 和设置端口开始:
const express = require('express');
const app = express();
const PORT = 3000;
// 用于解析 JSON 的中间件
app.use(express.json());
// 简单的测试端点
app.get('/', (req, res) => {
res.send('我的 REST API 正在运行!');
});
// 启动服务器
app.listen(PORT, () => {
console.log(`服务器已启动,地址为 http://localhost:${PORT}`);
});
使用以下命令启动服务器:
npm run dev
在浏览器中访问 http://localhost:3000 — 你应该会看到消息 "我的 REST API 正在运行!"。
添加模拟数据库
为简单起见,我们将数据存储在内存中(数组)。在实际项目中,你会连接 MongoDB 或 PostgreSQL,但对于学习来说这已经足够了。
// 模拟数据库
let users = [
{ id: 1, name: '阿列克谢', email: 'alex@example.com' },
{ id: 2, name: '玛丽亚', email: 'maria@example.com' }
];
let nextId = 3;
步骤 3:实现 CRUD 操作
现在创建用于操作用户的完整端点。我们将实现四种主要的 HTTP 方法:GET、POST、PUT、DELETE。
GET — 获取所有用户
// 获取所有用户
app.get('/api/users', (req, res) => {
res.json(users);
});
// 根据 ID 获取用户
app.get('/api/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const user = users.find(u => u.id === id);
if (!user) {
return res.status(404).json({ message: '未找到用户' });
}
res.json(user);
});
POST — 创建新用户
// 创建用户
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
// 简单验证
if (!name || !email) {
return res.status(400).json({ message: '姓名和电子邮件为必填项' });
}
const newUser = {
id: nextId++,
name,
email
};
users.push(newUser);
res.status(201).json(newUser);
});
PUT — 更新用户
// 更新用户
app.put('/api/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const { name, email } = req.bod