1. 准备Linux环境
确保Linux系统已安装Node.js(用于运行Swagger工具)和npm(Node.js包管理器)。若未安装,可通过以下命令安装:
sudo apt update && sudo apt install -y nodejs npm
2. 定义OpenAPI规范(Swagger核心规则)
创建swagger.yaml(或swagger.json)文件,通过Schema定义数据模型的验证规则。关键规则包括:
type:指定数据类型(如string、integer、object);required:标记必填字段(数组形式);format:约束数据格式(如email、date-time);pattern:用正则表达式验证字符串(如^[a-zA-Z0-9]+$);minimum/maximum:限制数值范围。示例(swagger.yaml):
openapi: 3.0.0
info:
title: Linux API Data Validation Demo
version: 1.0.0
paths:
/users:
post:
summary: Create a new user
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/User'
responses:
'201':
description: User created successfully
components:
schemas:
User:
type: object
properties:
username:
type: string
required: true
pattern: '^[a-z0-9_]{3,16}$' # 仅允许小写字母、数字、下划线,长度3-16
age:
type: integer
required: true
minimum: 18 # 必须年满18岁
email:
type: string
format: email # 符合邮箱格式
3. 安装Swagger验证工具
选择适合的工具进行规范验证和数据校验:
npm install -g @apidevtools/swagger-parser
docker pull swaggerapi/swagger-editor:v4.6.0
docker run -d -p 38080:8080 swaggerapi/swagger-editor:v4.6.0
npm install joi
4. 验证OpenAPI规范正确性
使用Swagger Parser检查swagger.yaml是否符合规范:
swagger-parser validate swagger.yaml
若规范有误,会输出具体错误信息(如缺少required字段、type不匹配);若正确,则无输出。
5. 启动Swagger UI测试数据验证
通过Swagger UI可视化测试API,验证数据是否符合规范:
npm install -g swagger-ui-express yamljs
创建server.js文件,集成Swagger UI并加载规范:
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const app = express();
const swaggerDocument = YAML.load('./swagger.yaml'); // 加载规范文件
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
app.listen(3000, () => console.log('Swagger UI running at http://localhost:3000/api-docs'));
启动服务器:
node server.js
访问http://localhost:3000/api-docs,找到/users接口,点击Try it out,输入不符合规范的数据(如username: "A"(长度不足)、age: 17(小于18)),提交后会显示验证错误信息。
6. 代码层面数据验证(可选,增强可靠性)
使用Joi库在Node.js代码中实现更复杂的数据验证,确保数据进入业务逻辑前符合规范:
const Joi = require('joi');
const express = require('express');
const app = express();
app.use(express.json());
// 定义Joi验证规则(与Swagger Schema一致)
const userSchema = Joi.object({
username: Joi.string().pattern('^[a-z0-9_]{3,16}$').required(),
age: Joi.number().integer().min(18).required(),
email: Joi.string().email().required()
});
// 用户创建接口
app.post('/users', (req, res) => {
const { error } = userSchema.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details[0].message }); // 返回验证错误
}
// 数据合法,继续处理业务逻辑
res.status(201).json({ message: 'User created successfully' });
});
app.listen(3000, () => console.log('Server running at http://localhost:3000'));
注意事项