Node.js 在 Linux 上的 API 接口设计指南
一 设计原则与规范
二 路由与响应设计
| 动作 | 方法 | URI | 成功状态码 |
|---|---|---|---|
| 获取列表 | GET | /v1/users | 200 OK |
| 创建 | POST | /v1/users | 201 Created |
| 获取单个 | GET | /v1/users/{id} | 200 OK |
| 全量更新 | PUT | /v1/users/{id} | 200 OK |
| 部分更新 | PATCH | /v1/users/{id} | 200 OK |
| 删除 | DELETE | /v1/users/{id} | 204 No Content |
三 安全与 Linux 运行时防护
四 文档与可观测性
五 最小可行示例 Express 代码
const express = require(‘express’); const helmet = require(‘helmet’); const cors = require(‘cors’); const morgan = require(‘morgan’); const { body, validationResult } = require(‘express-validator’); const usersRouter = require(‘./routes/users’);
const app = express(); app.use(helmet()); app.use(cors({ origin: process.env.CORS_ORIGIN?.split(‘,’) || ‘*’ })); app.use(morgan(‘combined’)); app.use(express.json({ limit: ‘10kb’ }));
// 统一错误处理 app.use((err, req, res, next) => { const status = err.status || 500; res.status(status).json({ error: { code: err.code || ‘InternalError’, message: err.message } }); });
app.use(‘/v1/users’, usersRouter); module.exports = app;
const createUser = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) return res.status(400).json({ error: { code: ‘InvalidInput’, message: errors.array()[0].msg } }); // TODO: 业务创建逻辑 const user = { id: Date.now(), …req.body }; res.status(201).json({ data: user }); };
const getUser = (req, res) => { const { id } = req.params; // TODO: 业务查询逻辑 res.json({ data: { id: Number(id), name: ‘Demo’ } }); };
module.exports = { createUser, getUser };
const express = require(‘express’); const router = express.Router(); const { body, param } = require(‘express-validator’); const { createUser, getUser } = require(‘…/controllers/users’);
router.post(‘/’, body(‘email’).isEmail().withMessage(‘Invalid email’), body(‘name’).isLength({ min: 1 }).withMessage(‘Name required’), createUser ); router.get(‘/:id’, param(‘id’).isInt().withMessage(‘ID must be integer’), getUser);
module.exports = router;
API listening on ${port}));