Files
Meshray-Manager/docs/重构记录.md
T
2026-06-30 15:14:37 +08:00

6.2 KiB
Raw Blame History

Provider → Service 重构完成总结

已完成的重构

1. API 路由统一(RESTful 规范)

修改前

  • /service - 单数形式
  • /providers - Provider 概念

修改后

  • /api/v1/services - 复数形式
  • 删除 /providers 相关路由

2. 前端 API 调用已更新

文件web/src/api/service.js

所有 API 调用路径已从 /service 改为 /services

// 修改前
url: '/service'

// 修改后
url: '/services'

3. 后端代码清理

已删除的文件

  • internal/service_impl/ - 整个目录已删除
  • internal/service/provider.go - ProviderService 已删除
  • internal/api/handler/provider.go - ProviderHandler 已删除

已更新的引用

  • internal/api/server.go - 移除所有 provider 相关代码
  • 只保留 ExternalService 相关的服务管理逻辑

🎯 当前架构设计

ExternalService 架构(统一服务管理)

┌─────────────────────────────────────────────────────┐
│              Web UI (Vue 3)                          │
│         /services 页面管理外部服务                     │
└────────────────┬────────────────────────────────────┘
                 │ REST API
┌────────────────▼────────────────────────────────────┐
│          API Handler                                │
│  GET    /api/v1/services       # 服务列表           │
│  POST   /api/v1/services       # 创建服务           │
│  GET    /api/v1/services/:id   # 服务详情           │
│  PUT    /api/v1/services/:id   # 更新服务           │
│  DELETE /api/v1/services/:id   # 删除服务           │
│  POST   /api/v1/services/:id/test # 测试连通性      │
└────────────────┬────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────┐
│          Service Layer                              │
│  ServiceService                                     │
│    - ListServices()                                 │
│    - GetServiceByID()                               │
│    - CreateService()                                │
│    - UpdateService()                                │
│    - DeleteService()                                │
│    - TestServiceConnectivity()                      │
└────────────────┬────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────┐
│          Database                                   │
│  external_services 表                               │
│    - id, category, service_type                     │
│    - config (JSON)                                  │
│    - enabled, status, ...                           │
└─────────────────────────────────────────────────────┘

📋 ExternalService 使用示例

1. 创建 STUN 服务器

API 请求

POST /api/v1/services
{
  "category": "networking",
  "serviceType": "stun_server",
  "name": "公共 STUN",
  "config": {
    "servers": [
      "stun.miwifi.com:3478",
      "stun.stunprotocol.org:3478"
    ]
  }
}

2. 创建 TURN 服务器

API 请求

POST /api/v1/services
{
  "category": "networking",
  "serviceType": "turn_server",
  "name": "Coturn 服务器",
  "config": {
    "server_addr": "turn.example.com:3478",
    "realm": "meshray",
    "auth_type": "long_term",
    "long_term": {
      "username": "meshray_user",
      "password": "secure_password"
    }
  }
}

3. 创建 DDNS 服务

API 请求

POST /api/v1/services
{
  "category": "dns",
  "serviceType": "ddns_aliyun",
  "name": "阿里云 DDNS",
  "config": {
    "access_key_id": "LTAI5t...",
    "access_key_secret": "...",
    "region_id": "cn-hangzhou",
    "domain": "home.example.com",
    "txt_record_name": "_meshray"
  }
}

🔧 下一步工作

P0 - 必须完成

  1. 实现 ExternalServiceProvider 接口

    • 定义统一的 Service 接口
    • 实现 STUN/TURN/DDNS等具体服务
    • 动态表单 Schema 生成
  2. 完善 ServiceService 业务逻辑

    • Config JSON 验证
    • 服务类型注册机制
    • 连通性测试实现

P1 - 近期完成

  1. 前端服务管理页面

    • ServicesList.vue - 服务列表
    • ServiceCreate.vue - 创建服务(动态表单)
    • ServiceEdit.vue - 编辑服务
  2. 文档更新

    • README.md - ExternalService 章节
    • docs/关键技术.md - 服务市场架构详解

💡 架构优势

维度 旧 Provider 架构 新 ExternalService 架构
命名清晰度 Provider 容易歧义 Service 直观明确
代码复杂度 多层抽象(registry/factory 直接基于数据库模型
前后端一致性 前端叫 Service,后端叫 Provider 统一叫 Service
扩展性 需要修改 Go 代码注册 数据库配置即可
维护成本 高(多个文件分散) 低(统一管理)

重构成果

  • 删除了约 500+ 行 过时的 Provider 代码
  • 统一了前后端命名(Service
  • 简化了架构(去除复杂的 Registry/Factory 模式)
  • API 路由符合 RESTful 规范
  • 为后续动态表单系统奠定基础

重构完成时间:2026-03-20
版本:v2.1.0