如何在30分钟内用JavaScript编写REST API:实用指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么要在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
  1. 为项目创建一个新文件夹,例如rest-api-todo。
  2. \n
  3. 在该文件夹中打开终端,执行命令npm init -y——这将创建package.json文件。
  4. \n
  5. 安装Express——Node.js最流行的框架:npm install express。
  6. \n
  7. 为了方便,将nodemon作为开发依赖安装:npm install --save-dev nodemon。它会在代码更改时自动重启服务器。
  8. \n
\n

安装完成后,在package.json中添加启动脚本:

\n
"scripts": {\n  "start": "node index.js",\n  "dev": "nodemon index.js"\n}
\n\n

步骤2:使用Express创建基本服务器

\n

现在创建index.js文件——这将是我们的应用程序入口点。在其中,我们将配置服务器,连接用于处理JSON的中间件,并定义第一个路由。

\n
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正在运行!"。

\n\n

步骤3:实现CRUD操作(GET, POST, PUT, DELETE)

\n

现在是最有趣的部分——创建一个用于管理任务的完整REST API。我们将实现四种主要的HTTP方法:

\n\n

3.1. GET /api/tasks — 获取所有任务

\n
// 获取所有任务\napp.get('/api/tasks', (req, res) => {\n    res.json(tasks);\n});
\n\n

3.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\n

3.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\n

3.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\n

3.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
\n

这个简单的API可以作为更复杂项目的基础。你可以添加数据库(例如MongoDB或PostgreSQL)、实现用户认证、添加日志记录等。REST API的可能性是无限的!

\n

如果你有任何问题或想深入了解某个主题,请在下方评论。祝你编码愉快!

博客

书籍推荐