From bf754d058c86e92109c80e7f7638009b4c9249d8 Mon Sep 17 00:00:00 2001
From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com>
Date: Mon, 29 Jun 2026 14:52:43 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9B=86=E6=88=90=20SpringDoc=20OpenAP?=
=?UTF-8?q?I=20+=20Swagger=20UI=20=E6=96=87=E6=A1=A3=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加 springdoc-openapi-starter-webmvc-ui 2.5.0
- OpenApiConfig 配置 API 标题、描述、版本、认证方案
- 文档包含 Bearer Token 和 HMAC 签名两种认证说明
- Swagger UI: /swagger-ui.html
- OpenAPI JSON: /v3/api-docs
---
par-api/pom.xml | 6 ++
.../com/par/api/config/OpenApiConfig.java | 55 +++++++++++++++++++
pom.xml | 8 +++
3 files changed, 69 insertions(+)
create mode 100644 par-api/src/main/java/com/par/api/config/OpenApiConfig.java
diff --git a/par-api/pom.xml b/par-api/pom.xml
index 1e6f2b2..806c239 100644
--- a/par-api/pom.xml
+++ b/par-api/pom.xml
@@ -47,6 +47,12 @@
lombok
true
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+
diff --git a/par-api/src/main/java/com/par/api/config/OpenApiConfig.java b/par-api/src/main/java/com/par/api/config/OpenApiConfig.java
new file mode 100644
index 0000000..a30c3fc
--- /dev/null
+++ b/par-api/src/main/java/com/par/api/config/OpenApiConfig.java
@@ -0,0 +1,55 @@
+package com.par.api.config;
+
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Contact;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * OpenAPI / Swagger 配置
+ */
+@Configuration
+public class OpenApiConfig {
+
+ @Bean
+ public OpenAPI parOpenAPI() {
+ return new OpenAPI()
+ .info(new Info()
+ .title("PAR Server API")
+ .description("PT Adapter Registry — 适配器配置注册中心\n\n"
+ + "## 认证方式\n"
+ + "- **Bearer Token**: 管理后台登录后获取,24h 有效,用于 `/api/v1/admin/**` 接口\n"
+ + "- **HMAC 签名**: 外部工具集成使用,以 `X-Signature` / `X-Timestamp` / `X-Email` 头携带\n\n"
+ + "## 端点分类\n"
+ + "- **公开读取**: `/health`, `/api/v1/sites/**`, `/api/v1/configs/**`, `/api/v1/manifest`\n"
+ + "- **需认证**: `/api/v1/auth/**` (登录/注册)\n"
+ + "- **HMAC 签名**: `/api/v1/configs/*/submit`, `/api/v1/sites/*/submit`\n"
+ + "- **管理员**: `/api/v1/admin/**` (Bearer Token)\n"
+ + "- **账户**: `/api/v1/account/**` (Bearer Token)")
+ .version("v1.0.0")
+ .contact(new Contact()
+ .name("PAR Team")
+ .email("admin@par.local"))
+ .license(new License()
+ .name("MIT")
+ .url("https://opensource.org/licenses/MIT")))
+ .addSecurityItem(new SecurityRequirement().addList("Bearer"))
+ .addSecurityItem(new SecurityRequirement().addList("HMAC"))
+ .components(new Components()
+ .addSecuritySchemes("Bearer", new SecurityScheme()
+ .type(SecurityScheme.Type.HTTP)
+ .scheme("bearer")
+ .bearerFormat("custom")
+ .description("登录接口返回的 token"))
+ .addSecuritySchemes("HMAC", new SecurityScheme()
+ .type(SecurityScheme.Type.APIKEY)
+ .in(SecurityScheme.In.HEADER)
+ .name("X-Signature")
+ .description("HMAC-SHA256 签名,需同时携带 X-Timestamp 和 X-Email 头")));
+ }
+}
diff --git a/pom.xml b/pom.xml
index 38778d7..5a1206a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,7 @@
1.17.0
5.8.27
10.15.0
+ 2.5.0
@@ -109,6 +110,13 @@
flyway-mysql
${flyway.version}
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ ${springdoc.version}
+