Debian系统中Swagger定制化开发方法
一 基础环境准备
二 定制方向与落地做法
三 示例一 Express集成与UI配置
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const path = require('path');
const swaggerDocument = YAML.load('./swagger.yaml');
const app = express();
const PORT = process.env.PORT || 3000;
// 可选:提供自定义静态资源
app.use('/custom', express.static(path.join(__dirname, 'public')));
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, {
deepLinking: true,
layout: 'StandaloneLayout',
presets: [
swaggerUi.presets.apis,
swaggerUi.presets.topbar
],
// 自定义 CSS/JS(URL 指向 /custom 下资源)
customCssUrl: '/custom/custom.css',
customJsUrl: '/custom/custom.js',
// 请求/响应拦截示例
requestInterceptor: (req) => {
// 例如统一注入认证头
// req.headers['Authorization'] = 'Bearer <your-token>';
return req;
}
}));
app.listen(PORT, () => {
console.log(`Swagger UI: http://localhost:${PORT}/api-docs`);
});
四 示例二 代码注解自动生成规范
const swaggerJsDoc = require('swagger-jsdoc');
const swaggerOptions = {
swaggerDefinition: {
openapi: '3.0.0',
info: {
title: 'Debian API',
version: '1.0.0'
},
servers: [{ url: 'http://localhost:3000' }]
},
apis: ['./routes/*.js'] // 扫描路由注解
};
const swaggerDocs = swaggerJsDoc(swaggerOptions);
module.exports = swaggerDocs;
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const swaggerDocs = require('./swaggerOptions');
const app = express();
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));
app.listen(3000, () => console.log('Docs at http://localhost:3000/api-docs'));
/**
* @swagger
* /users:
* get:
* summary: 获取用户列表
* responses:
* 200:
* description: 用户数组
* content:
* application/json:
* schema:
* type: array
* items:
* $ref: '#/components/schemas/User'
* components:
* schemas:
* User:
* type: object
* properties:
* id:
* type: integer
* format: int64
* name:
* type: string
*/
app.get('/users', (req, res) => { res.json([{ id: 1, name: 'Alice' }]); });
五 示例三 Docker化部署与多服务托管
docker pull swaggerapi/swagger-ui
docker run -p 8080:8080 -e SWAGGER_JSON=/spec/openapi.yaml -v $(pwd)/spec:/spec swaggerapi/swagger-ui
server {
listen 80;
server_name your-domain;
location /docs1/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Forwarded-Prefix /docs1;
}
location /docs2/ {
proxy_pass http://127.0.0.1:8081/;
proxy_set_header X-Forwarded-Prefix /docs2;
}
}