引言:为什么要在30分钟内用JavaScript编写REST API?
\n现代网页开发离不开API(应用程序编程接口)。REST(表述性状态传递)是创建网络服务最流行的架构风格。如果你想快速掌握后端开发或启动你的第一个服务器,JavaScript和Node.js是理想的选择。在30分钟内,你将能够创建一个完整的REST API,它可以处理请求、以JSON格式返回数据,并与数据库(在我们的示例中,是一个简单的内存数组)协同工作。
\n在本文中,我们将分析一个实际示例:创建一个用于管理任务列表(To-Do list)的API。你将学习如何配置服务器、处理GET、POST、PUT和DELETE请求,以及添加基本验证。阅读结束时,你将拥有可以直接运行和测试的现成代码。
\n\n步骤1:项目设置和安装依赖
\n在编写代码之前,需要准备好环境。确保你已经安装了Node.js(可以从官网下载)。然后按照以下说明操作:
\n- \n
- 为项目创建一个新文件夹,例如
rest-api-todo。 \n - 在该文件夹中打开终端,执行命令
npm init -y——这将创建package.json文件。 \n - 安装Express——Node.js最流行的框架:
npm install express。 \n - 为了方便,将
nodemon作为开发依赖安装:npm install --save-dev nodemon。它会在代码更改时自动重启服务器。 \n
安装完成后,在package.json中添加启动脚本:
"scripts": {\n "start": "node index.js",\n "dev": "nodemon index.js"\n}\n\n步骤2:使用Express创建基本服务器
\n现在创建index.js文件——这将是我们的应用程序入口点。在其中,我们将配置服务器,连接用于处理JSON的中间件,并定义第一个路由。
const express = require('express');\nconst app = express();\nconst PORT = 3000;\n\n// 用于解析JSON的中间件\napp.use(express.json());\n\n// 临时数据存储(代替数据库)\nlet tasks = [\n { id: 1, title: '学习Express', completed: false },\n { id: 2, title: '编写REST API', completed: false }\n];\nlet currentId = 3;\n\n// 用于检查的基本路由\napp.get('/', (req, res) => {\n res.send('REST API正在运行!使用 /api/tasks');\n});\n\n// 启动服务器\napp.listen(PORT, () => {\n console.log(`服务器已启动,地址为 http://localhost:${PORT}`);\n});\n使用命令npm run dev启动服务器,并在浏览器中打开http://localhost:3000。你应该会看到消息"REST API正在运行!"。
步骤3:实现CRUD操作(GET, POST, PUT, DELETE)
\n现在是最有趣的部分——创建一个用于管理任务的完整REST API。我们将实现四种主要的HTTP方法:
\n\n3.1. GET /api/tasks — 获取所有任务
\n// 获取所有任务\napp.get('/api/tasks', (req, res) => {\n res.json(tasks);\n});\n\n3.2. GET /api/tasks/:id — 根据ID获取单个任务
\n// 根据ID获取任务\napp.get('/api/tasks/:id', (req, res) => {\n const id = parseInt(req.params.id);\n const task = tasks.find(t => t.id === id);\n \n if (!task) {\n return res.status(404).json({ message: '任务未找到' });\n }\n res.json(task);\n});\n\n3.3. POST /api/tasks — 创建新任务
\n// 创建新任务\napp.post('/api/tasks', (req, res) => {\n const { title, completed } = req.body;\n \n // 验证\n if (!title || typeof title !== 'string') {\n return res.status(400).json({ message: '任务标题是必填项且必须为字符串' });\n }\n\n const newTask = {\n id: currentId++,\n title: title,\n completed: completed || false\n };\n \n tasks.push(newTask);\n res.status(201).json(newTask);\n});\n\n3.4. PUT /api/tasks/:id — 更新任务
\n// 更新任务\napp.put('/api/tasks/:id', (req, res) => {\n const id = parseInt(req.params.id);\n const task = tasks.find(t => t.id === id);\n \n if (!task) {\n return res.status(404).json({ message: '任务未找到' });\n }\n \n const { title, completed } = req.body;\n \n if (title !== undefined) {\n if (typeof title !== 'string') {\n return res.status(400).json({ message: '标题必须是字符串' });\n }\n task.title = title;\n }\n \n if (completed !== undefined) {\n if (typeof completed !== 'boolean') {\n return res.status(400).json({ message: 'completed字段必须是布尔值' });\n }\n task.completed = completed;\n }\n \n res.json(task);\n});\n\n3.5. DELETE /api/tasks/:id — 删除任务
\n// 删除任务\napp.delete('/api/tasks/:id', (req, res) => {\n const id = parseInt(req.params.id);\n const index = tasks.findIndex(t => t.id === id);\n \n if (index === -1) {\n return res.status(404).json({ message: '任务未找到' });\n }\n \n tasks.splice(index, 1);\n res.status(204).send();\n});\n\n步骤4:测试API
\n现在我们的API已经准备好进行测试。你可以使用任何HTTP客户端,例如Postman、cURL或直接在浏览器中。以下是一些测试示例:
\n\n使用cURL测试
\n# 获取所有任务\ncurl http://localhost:3000/api/tasks\n\n# 获取ID为1的任务\ncurl http://localhost:3000/api/tasks/1\n\n# 创建新任务\ncurl -X POST http://localhost:3000/api/tasks \\\n -H "Content-Type: application/json" \\\n -d '{"title": "学习REST API", "completed": false}'\n\n# 更新任务\ncurl -X PUT http://localhost:3000/api/tasks/1 \\\n -H "Content-Type: application/json" \\\n -d '{"completed": true}'\n\n# 删除任务\ncurl -X DELETE http://localhost:3000/api/tasks/1\n\n结论
\n恭喜!你刚刚在30分钟内使用JavaScript和Node.js创建了一个功能完整的REST API。我们涵盖了:
\n- \n
- 项目设置和Express框架安装 \n
- 创建基本服务器 \n
- 实现所有CRUD操作(GET、POST、PUT、DELETE) \n
- 添加输入验证 \n
- 测试API \n
这个简单的API可以作为更复杂项目的基础。你可以添加数据库(例如MongoDB或PostgreSQL)、实现用户认证、添加日志记录等。REST API的可能性是无限的!
\n如果你有任何问题或想深入了解某个主题,请在下方评论。祝你编码愉快!