// 定义API文档的JSON const swaggerDocument = { "openapi": "3.0.3", "info": { "title": "DNS Server API", "description": "DNS服务器完整API文档,包括统计信息、Shield管理、主机管理等功能。", "version": "1.2.5", "contact": { "name": "DNS Server 支持", "email": "support@dnsserver.com" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "servers": [ { "url": "http://localhost:8080/api", "description": "本地开发服务器" }, { "url": "http://{host}:{port}/api", "description": "自定义服务器", "variables": { "host": { "default": "localhost" }, "port": { "default": "8080" } } } ], "paths": { "/login": { "post": { "summary": "用户登录", "description": "使用用户名和密码登录DNS服务器API。", "tags": ["auth"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "username": {"type": "string", "description": "用户名"}, "password": {"type": "string", "description": "密码"} } }, "example": { "username": "admin", "password": "admin" } } } }, "responses": { "200": { "description": "登录成功", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"}, "message": {"type": "string", "description": "操作信息"} } }, "example": { "status": "success", "message": "登录成功" } } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "无效的请求体" } } } }, "401": { "description": "用户名或密码错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "用户名或密码错误" } } } } } } }, "/logout": { "post": { "summary": "用户注销", "description": "注销当前登录的用户会话。", "tags": ["auth"], "responses": { "200": { "description": "注销成功", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"}, "message": {"type": "string", "description": "操作信息"} } }, "example": { "status": "success", "message": "注销成功" } } } } } } }, "/change-password": { "post": { "summary": "修改密码", "description": "修改当前登录用户的密码。", "tags": ["auth"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "currentPassword": {"type": "string", "description": "当前密码"}, "newPassword": {"type": "string", "description": "新密码"} } }, "example": { "currentPassword": "admin", "newPassword": "newpassword" } } } }, "responses": { "200": { "description": "密码修改成功", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"}, "message": {"type": "string", "description": "操作信息"} } }, "example": { "status": "success", "message": "密码修改成功" } } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "无效的请求体" } } } }, "401": { "description": "当前密码错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "当前密码错误" } } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "保存密码失败" } } } } } } }, "/stats": { "get": { "summary": "获取系统统计信息", "description": "获取DNS服务器和Shield的详细统计信息,包括查询量、CPU使用率等。", "tags": ["stats"], "responses": { "200": { "description": "成功获取统计信息", "content": { "application/json": { "schema": { "type": "object", "properties": { "dns": { "type": "object", "properties": { "Queries": {"type": "integer", "description": "总查询次数"}, "Blocked": {"type": "integer", "description": "被阻止的查询次数"}, "Allowed": {"type": "integer", "description": "允许的查询次数"}, "Errors": {"type": "integer", "description": "错误查询次数"}, "LastQuery": {"type": "string", "description": "最近一次查询时间"}, "AvgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, "TotalResponseTime": {"type": "number", "description": "总响应时间(毫秒)"}, "QueryTypes": {"type": "object", "description": "查询类型统计"}, "SourceIPs": {"type": "object", "description": "来源IP统计"}, "CpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, "DNSSECQueries": {"type": "integer", "description": "DNSSEC查询次数"}, "DNSSECSuccess": {"type": "integer", "description": "DNSSEC成功次数"}, "DNSSECFailed": {"type": "integer", "description": "DNSSEC失败次数"}, "DNSSECEnabled": {"type": "boolean", "description": "是否启用DNSSEC"} } }, "shield": {"type": "object", "description": "Shield统计信息"}, "topQueryType": {"type": "string", "description": "最常见的查询类型"}, "activeIPs": {"type": "integer", "description": "活跃IP数量"}, "avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, "cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, "dnssecEnabled": {"type": "boolean", "description": "是否启用DNSSEC"}, "dnssecQueries": {"type": "integer", "description": "DNSSEC查询次数"}, "dnssecSuccess": {"type": "integer", "description": "DNSSEC成功次数"}, "dnssecFailed": {"type": "integer", "description": "DNSSEC失败次数"}, "dnssecUsage": {"type": "number", "description": "DNSSEC使用率(百分比)"}, "time": {"type": "string", "description": "统计时间"} } }, "examples": { "default": { "value": { "dns": { "Queries": 1250, "Blocked": 230, "Allowed": 1020, "Errors": 0, "LastQuery": "2023-07-15T14:30:45Z", "AvgResponseTime": 12.5, "TotalResponseTime": 15625, "QueryTypes": {"A": 850, "AAAA": 250, "CNAME": 150}, "SourceIPs": {"192.168.1.100": 500, "192.168.1.101": 750}, "CpuUsage": 0.15, "DNSSECQueries": 500, "DNSSECSuccess": 480, "DNSSECFailed": 20, "DNSSECEnabled": true }, "shield": {}, "topQueryType": "A", "activeIPs": 2, "avgResponseTime": 12.5, "cpuUsage": 0.15, "dnssecEnabled": true, "dnssecQueries": 500, "dnssecSuccess": 480, "dnssecFailed": 20, "dnssecUsage": 40.0, "time": "2023-07-15T14:30:45Z" } } } } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "无法获取统计信息"} } } } } } }, "/top-blocked": { "get": { "summary": "获取TOP被阻止域名", "description": "获取被阻止次数最多的域名列表。", "tags": ["stats"], "responses": { "200": { "description": "成功获取TOP被阻止域名", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "domain": {"type": "string", "description": "域名"}, "count": {"type": "integer", "description": "被阻止次数"} } } }, "example": [ {"domain": "ad.example.com", "count": 150}, {"domain": "tracker.example.net", "count": 120} ] } } } } } }, "/top-resolved": { "get": { "summary": "获取TOP已解析域名", "description": "获取解析次数最多的域名列表。", "tags": ["stats"], "responses": { "200": { "description": "成功获取TOP已解析域名", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "domain": {"type": "string", "description": "域名"}, "count": {"type": "integer", "description": "解析次数"} } } }, "example": [ {"domain": "google.com", "count": 200}, {"domain": "facebook.com", "count": 150} ] } } } } } }, "/top-clients": { "get": { "summary": "获取TOP客户端", "description": "获取查询量最多的客户端IP列表。", "tags": ["stats"], "responses": { "200": { "description": "成功获取TOP客户端", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "ip": {"type": "string", "description": "客户端IP地址"}, "count": {"type": "integer", "description": "查询次数"} } } }, "example": [ {"ip": "192.168.1.100", "count": 500}, {"ip": "192.168.1.101", "count": 750} ] } } } } } }, "/top-domains": { "get": { "summary": "获取TOP域名", "description": "获取查询量最多的域名列表(包括被阻止和已解析的域名)。", "tags": ["stats"], "responses": { "200": { "description": "成功获取TOP域名", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "domain": {"type": "string", "description": "域名"}, "count": {"type": "integer", "description": "查询次数"} } } }, "example": [ {"domain": "example.com", "count": 150}, {"domain": "google.com", "count": 120} ] } } } } } }, "/recent-blocked": { "get": { "summary": "获取最近被阻止的域名", "description": "获取最近被Shield阻止的域名列表。", "tags": ["stats"], "responses": { "200": { "description": "成功获取最近被阻止的域名", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "domain": {"type": "string", "description": "域名"}, "timestamp": {"type": "string", "description": "阻止时间"} } } }, "example": [ {"domain": "ad.example.com", "timestamp": "2023-07-15T14:30:45Z"}, {"domain": "tracker.example.net", "timestamp": "2023-07-15T14:29:30Z"} ] } } } } } }, "/hourly-stats": { "get": { "summary": "获取小时统计", "description": "获取按小时统计的DNS查询数据。", "tags": ["stats"], "responses": { "200": { "description": "成功获取小时统计", "content": { "application/json": { "schema": { "type": "object", "properties": { "labels": {"type": "array", "items": {"type": "string"}, "description": "小时标签"}, "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} } }, "example": { "labels": ["15:00", "16:00", "17:00"], "data": [120, 90, 150] } } } } } } }, "/daily-stats": { "get": { "summary": "获取每日统计", "description": "获取最近7天的DNS查询统计数据。", "tags": ["stats"], "responses": { "200": { "description": "成功获取每日统计", "content": { "application/json": { "schema": { "type": "object", "properties": { "labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"}, "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} } }, "example": { "labels": ["01-02", "01-03", "01-04"], "data": [2500, 2700, 2300] } } } } } } }, "/monthly-stats": { "get": { "summary": "获取每月统计", "description": "获取最近30天的DNS查询统计数据。", "tags": ["stats"], "responses": { "200": { "description": "成功获取每月统计", "content": { "application/json": { "schema": { "type": "object", "properties": { "labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"}, "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} } }, "example": { "labels": ["01-01", "01-02", "01-03"], "data": [2500, 2700, 2300] } } } } } } }, "/query/type": { "get": { "summary": "获取查询类型统计", "description": "获取DNS查询类型的详细统计信息。", "tags": ["stats"], "responses": { "200": { "description": "成功获取查询类型统计", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "type": {"type": "string", "description": "查询类型"}, "count": {"type": "integer", "description": "查询次数"} } } }, "example": [ {"type": "A", "count": 850}, {"type": "AAAA", "count": 250}, {"type": "CNAME", "count": 150} ] } } } } } }, "/logs/stats": { "get": { "summary": "获取日志统计信息", "description": "获取DNS查询日志的统计信息。", "tags": ["logs"], "responses": { "200": { "description": "成功获取日志统计信息", "content": { "application/json": { "schema": { "type": "object", "description": "日志统计信息"} } } } } } }, "/logs/query": { "get": { "summary": "查询日志", "description": "根据条件查询DNS查询日志。", "tags": ["logs"], "parameters": [ { "name": "limit", "in": "query", "schema": { "type": "integer", "default": 100 }, "description": "返回结果数量限制" }, { "name": "offset", "in": "query", "schema": { "type": "integer", "default": 0 }, "description": "结果偏移量" }, { "name": "sort", "in": "query", "schema": { "type": "string" }, "description": "排序字段" }, { "name": "direction", "in": "query", "schema": { "type": "string" }, "description": "排序方向" }, { "name": "result", "in": "query", "schema": { "type": "string" }, "description": "查询结果过滤" }, { "name": "search", "in": "query", "schema": { "type": "string" }, "description": "搜索关键词" } ], "responses": { "200": { "description": "成功查询日志", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "description": "日志条目" } } } } } } } }, "/logs/count": { "get": { "summary": "获取日志总数", "description": "获取DNS查询日志的总数。", "tags": ["logs"], "responses": { "200": { "description": "成功获取日志总数", "content": { "application/json": { "schema": { "type": "object", "properties": { "count": {"type": "integer", "description": "日志总数"} } }, "example": { "count": 1000 } } } } } } }, "/shield": { "get": { "summary": "获取Shield配置和统计信息", "description": "获取Shield的配置信息和规则统计,包括更新间隔、屏蔽方法、黑名单数量等。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功获取配置和统计信息", "content": { "application/json": { "schema": { "type": "object", "properties": { "updateInterval": {"type": "integer", "description": "更新间隔(秒)"}, "blockMethod": {"type": "string", "description": "屏蔽方法"}, "blacklistCount": {"type": "integer", "description": "黑名单数量"}, "domainRulesCount": {"type": "integer", "description": "域名规则数量"}, "domainExceptionsCount": {"type": "integer", "description": "域名例外规则数量"}, "regexRulesCount": {"type": "integer", "description": "正则规则数量"}, "regexExceptionsCount": {"type": "integer", "description": "正则例外规则数量"}, "hostsRulesCount": {"type": "integer", "description": "Hosts规则数量"} } }, "example": { "updateInterval": 3600, "blockMethod": "NXDOMAIN", "blacklistCount": 4, "domainRulesCount": 1000, "domainExceptionsCount": 100, "regexRulesCount": 50, "regexExceptionsCount": 10, "hostsRulesCount": 200 } } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "无法获取Shield配置"} } } } } }, "post": { "summary": "添加屏蔽规则", "description": "添加新的屏蔽规则到Shield。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "rule": {"type": "string", "description": "屏蔽规则"} } }, "example": { "rule": "example.com" } } } }, "responses": { "200": { "description": "成功添加规则", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "参数格式错误"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "添加规则失败"} } } } } }, "delete": { "summary": "删除屏蔽规则", "description": "从Shield中删除指定的屏蔽规则。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "rule": {"type": "string", "description": "要删除的屏蔽规则"} } }, "example": { "rule": "example.com" } } } }, "responses": { "200": { "description": "成功删除规则", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "参数格式错误"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "删除规则失败"} } } } } }, "put": { "summary": "重新加载规则", "description": "重新加载和应用Shield规则。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功重新加载规则", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"}, "message": {"type": "string", "description": "操作信息"} } }, "example": { "status": "success", "message": "规则重新加载成功" } } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "重新加载规则失败"} } } } } } }, "/shield/blacklists": { "get": { "summary": "获取黑名单列表", "description": "获取Shield的黑名单列表,包括内置黑名单和自定义黑名单。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功获取黑名单列表", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string", "description": "黑名单名称"}, "url": {"type": "string", "description": "黑名单URL"}, "enabled": {"type": "boolean", "description": "是否启用"}, "lastUpdate": {"type": "string", "description": "最后更新时间"}, "status": {"type": "string", "description": "状态"}, "rulesCount": {"type": "integer", "description": "规则数量"} } } }, "example": [ { "name": "AdBlock List", "url": "https://example.com/ads.txt", "enabled": true, "lastUpdate": "2023-07-15T10:00:00Z", "status": "active", "rulesCount": 1500 } ] } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "获取黑名单列表失败"} } } } } }, "post": { "summary": "添加黑名单", "description": "添加新的黑名单URL到Shield。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["name", "url"], "properties": { "name": {"type": "string", "description": "黑名单名称"}, "url": {"type": "string", "description": "黑名单URL"}, "enabled": {"type": "boolean", "description": "是否启用", "default": true} } }, "example": { "name": "AdBlock List", "url": "https://example.com/ads.txt", "enabled": true } } } }, "responses": { "200": { "description": "成功添加黑名单", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "名称和URL为必填项"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "添加黑名单失败"} } } } } }, "put": { "summary": "更新黑名单列表(包括启用/禁用状态)", "description": "更新黑名单列表(包括启用/禁用状态)。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "blacklists": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string", "description": "黑名单名称"}, "url": {"type": "string", "description": "黑名单URL"}, "enabled": {"type": "boolean", "description": "是否启用"} } } } } }, "example": { "blacklists": [ { "name": "AdBlock List", "url": "https://example.com/ads.txt", "enabled": true } ] } } } }, "responses": { "200": { "description": "成功更新黑名单列表", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "无效的请求体"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "更新黑名单列表失败"} } } } } } }, "/shield/localrules": { "get": { "summary": "获取自定义规则", "description": "获取Shield的自定义规则列表。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功获取自定义规则", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": {"type": "string", "description": "规则ID"}, "pattern": {"type": "string", "description": "规则模式"}, "description": {"type": "string", "description": "规则描述"} } } }, "example": [ {"id": "1", "pattern": ".*malware.*", "description": "恶意软件域名"} ] } } } } }, "post": { "summary": "添加自定义规则", "description": "添加新的自定义规则。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "pattern": {"type": "string", "description": "规则模式"}, "description": {"type": "string", "description": "规则描述"} } }, "example": { "pattern": ".*ad\.com$", "description": "广告域名" } } } }, "responses": { "200": { "description": "成功添加规则", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } } } }, "delete": { "summary": "删除自定义规则", "description": "删除指定的自定义规则。", "deprecated": false, "tags": ["shield"], "parameters": [ { "name": "id", "in": "query", "required": true, "schema": { "type": "string" }, "description": "规则ID" } ], "responses": { "200": { "description": "成功删除规则", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } } } } }, "/shield/remoterules": { "get": { "summary": "获取远程规则状态", "description": "获取远程规则的更新状态和版本信息。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功获取远程规则", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": {"type": "string", "description": "规则ID"}, "pattern": {"type": "string", "description": "规则模式"}, "source": {"type": "string", "description": "规则来源"} } } }, "example": [ {"id": "1001", "pattern": ".*phishing.*", "source": "malwarelist"} ] } } } } } }, "/shield/hosts": { "get": { "summary": "获取hosts内容", "description": "获取当前的hosts文件内容。", "deprecated": false, "tags": ["shield"], "responses": { "200": { "description": "成功获取hosts列表", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "ip": {"type": "string", "description": "IP地址"}, "domain": {"type": "string", "description": "域名"} } } }, "example": [ {"ip": "127.0.0.1", "domain": "localhost"} ] } } } } }, "post": { "summary": "添加hosts记录", "description": "添加新的hosts记录。", "deprecated": false, "tags": ["shield"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["ip", "domain"], "properties": { "ip": {"type": "string", "description": "IP地址"}, "domain": {"type": "string", "description": "域名"} } }, "example": { "ip": "127.0.0.1", "domain": "example.com" } } } }, "responses": { "200": { "description": "成功添加hosts记录", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "IP和域名是必填项"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "添加hosts记录失败"} } } } } }, "delete": { "summary": "删除hosts记录", "description": "删除指定域名的hosts记录。", "deprecated": false, "tags": ["shield"], "parameters": [ { "name": "domain", "in": "query", "required": true, "schema": { "type": "string" }, "description": "要删除的域名" } ], "responses": { "200": { "description": "成功删除hosts记录", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "域名是必填项"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "删除hosts记录失败"} } } } } } }, "/dns/query": { "post": { "summary": "查询DNS记录", "description": "查询指定域名的DNS记录,可以指定记录类型。", "tags": ["dns"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "domain": { "type": "string", "description": "要查询的域名" }, "recordType": { "type": "string", "description": "DNS记录类型(如A、AAAA、MX、NS等)" } }, "required": ["domain"] }, "example": { "domain": "example.com", "recordType": "A" } } } }, "responses": { "200": { "description": "成功获取DNS记录", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "Type": { "type": "string", "description": "DNS记录类型" }, "Value": { "type": "string", "description": "DNS记录值" }, "TTL": { "type": "integer", "description": "生存时间" }, "Preference": { "type": "integer", "description": "MX记录优先级" } } } }, "example": [ {"Type": "A", "Value": "93.184.216.34", "TTL": 172800}, {"Type": "A", "Value": "93.184.216.35", "TTL": 172800} ] } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "string", "description": "错误信息" } } }, "example": { "error": "Domain parameter is required" } } } } } } }, "/status": { "get": { "summary": "获取服务器状态", "description": "获取DNS服务器的状态信息,包括查询统计、运行时间等。", "tags": ["server"], "responses": { "200": { "description": "成功获取服务器状态", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "服务器状态"}, "queries": {"type": "integer", "description": "总查询次数"}, "blocked": {"type": "integer", "description": "被阻止的查询次数"}, "allowed": {"type": "integer", "description": "允许的查询次数"}, "errors": {"type": "integer", "description": "错误查询次数"}, "lastQuery": {"type": "string", "description": "最近一次查询时间"}, "avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, "activeIPs": {"type": "integer", "description": "活跃IP数量"}, "startTime": {"type": "string", "description": "服务器启动时间"}, "uptime": {"type": "integer", "description": "运行时间(毫秒)"}, "cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, "timestamp": {"type": "string", "description": "当前时间"} } }, "example": { "status": "running", "queries": 1250, "blocked": 230, "allowed": 1020, "errors": 0, "lastQuery": "2023-07-15T14:30:45Z", "avgResponseTime": 12.5, "activeIPs": 2, "startTime": "2023-07-15T10:00:00Z", "uptime": 16200000, "cpuUsage": 0.15, "timestamp": "2023-07-15T14:30:45Z" } } } } } } }, "/config": { "get": { "summary": "获取服务器配置", "description": "获取DNS服务器的配置信息,包括Shield配置。", "tags": ["server"], "responses": { "200": { "description": "成功获取服务器配置", "content": { "application/json": { "schema": { "type": "object", "properties": { "shield": { "type": "object", "properties": { "blockMethod": {"type": "string", "description": "屏蔽方法"}, "customBlockIP": {"type": "string", "description": "自定义屏蔽IP"}, "blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}}, "updateInterval": {"type": "integer", "description": "更新间隔(秒)"} } } } }, "example": { "shield": { "blockMethod": "NXDOMAIN", "customBlockIP": "", "blacklists": [ { "name": "AdGuard DNS filter", "url": "https://example.com/ads.txt", "enabled": true } ], "updateInterval": 3600 } } } } } } }, "post": { "summary": "更新服务器配置", "description": "更新DNS服务器的配置信息,包括Shield配置。", "tags": ["server"], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "shield": { "type": "object", "properties": { "blockMethod": {"type": "string", "description": "屏蔽方法"}, "customBlockIP": {"type": "string", "description": "自定义屏蔽IP"}, "blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}}, "updateInterval": {"type": "integer", "description": "更新间隔(秒)"} } } } }, "example": { "shield": { "blockMethod": "NXDOMAIN", "customBlockIP": "", "blacklists": [ { "name": "AdGuard DNS filter", "url": "https://example.com/ads.txt", "enabled": true } ], "updateInterval": 3600 } } } } }, "responses": { "200": { "description": "成功更新服务器配置", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": {"type": "boolean", "description": "是否成功"}, "message": {"type": "string", "description": "操作信息"} } }, "example": { "success": true, "message": "配置已更新" } } } }, "400": { "description": "请求参数错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "无效的请求体" } } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": { "error": "保存配置失败" } } } } } } }, "/config/restart": { "post": { "summary": "重启服务器", "description": "重启DNS服务器。", "tags": ["server"], "responses": { "200": { "description": "成功重启服务器", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": {"type": "string", "description": "操作状态"} } }, "example": {"status": "success"} } } }, "500": { "description": "服务器内部错误", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": {"type": "string", "description": "错误信息"} } }, "example": {"error": "重启服务器失败"} } } } } } } }, "tags": [ { "name": "auth", "description": "认证相关API" }, { "name": "stats", "description": "统计相关API" }, { "name": "shield", "description": "Shield相关API" }, { "name": "server", "description": "服务器相关API" }, { "name": "logs", "description": "日志相关API" } ] }; // 初始化Swagger UI window.onload = function() { const ui = SwaggerUIBundle({ spec: swaggerDocument, dom_id: '#swagger-ui', deepLinking: true, presets: [ SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset ], plugins: [ SwaggerUIBundle.plugins.DownloadUrl ], layout: "StandaloneLayout" }); window.ui = ui; };