Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions .cursor/rules/api-protocols.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
---
description:
globs:
alwaysApply: false
---
# API协议与规范

## 协议概览

GoAnalysis使用Protocol Buffers定义API,支持gRPC和HTTP两种协议,实现强类型、高性能的服务间通信。

## API服务定义

### 分析服务 ([api/analysis/v1/](mdc:goanalysis/api/analysis/v1))

#### 核心文件
- [analysis.proto](mdc:goanalysis/api/analysis/v1/analysis.proto) - 分析服务protobuf定义
- [analysis.pb.go](mdc:goanalysis/api/analysis/v1/analysis.pb.go) - 生成的Go消息类型
- [analysis_grpc.pb.go](mdc:goanalysis/api/analysis/v1/analysis_grpc.pb.go) - gRPC服务接口
- [analysis.pb.gw.go](mdc:goanalysis/api/analysis/v1/analysis.pb.gw.go) - HTTP网关映射

#### 错误处理
- [error_reason.proto](mdc:goanalysis/api/analysis/v1/error_reason.proto) - 错误码定义
- [error_reason.pb.go](mdc:goanalysis/api/analysis/v1/error_reason.pb.go) - 错误类型

### 静态分析服务 ([api/staticanalysis/v1/](mdc:goanalysis/api/staticanalysis/v1))

#### 核心文件
- [staticanalysis.proto](mdc:goanalysis/api/staticanalysis/v1/staticanalysis.proto) - 静态分析API定义
- [staticanalysis.pb.go](mdc:goanalysis/api/staticanalysis/v1/staticanalysis.pb.go) - 消息类型
- [staticanalysis_grpc.pb.go](mdc:goanalysis/api/staticanalysis/v1/staticanalysis_grpc.pb.go) - gRPC接口
- [staticanalysis.pb.gw.go](mdc:goanalysis/api/staticanalysis/v1/staticanalysis.pb.gw.go) - HTTP网关
- [staticanalysis_http.pb.go](mdc:goanalysis/api/staticanalysis/v1/staticanalysis_http.pb.go) - HTTP处理器

### 文件管理服务 ([api/filemanager/v1/](mdc:goanalysis/api/filemanager/v1))

#### 核心文件
- [filemanager.proto](mdc:goanalysis/api/filemanager/v1/filemanager.proto) - 文件管理API定义
- [filemanager.pb.go](mdc:goanalysis/api/filemanager/v1/filemanager.pb.go) - 消息类型
- [filemanager_grpc.pb.go](mdc:goanalysis/api/filemanager/v1/filemanager_grpc.pb.go) - gRPC接口
- [filemanager.pb.gw.go](mdc:goanalysis/api/filemanager/v1/filemanager.pb.gw.go) - HTTP网关

## 第三方协议 ([third_party/](mdc:goanalysis/third_party))

### Google APIs
- [google/api/annotations.proto](mdc:goanalysis/third_party/google/api/annotations.proto) - HTTP注解
- [google/api/http.proto](mdc:goanalysis/third_party/google/api/http.proto) - HTTP路由定义
- [google/api/field_behavior.proto](mdc:goanalysis/third_party/google/api/field_behavior.proto) - 字段行为注解

### 标准类型
- [google/protobuf/empty.proto](mdc:goanalysis/third_party/google/protobuf/empty.proto) - 空消息
- [google/protobuf/timestamp.proto](mdc:goanalysis/third_party/google/protobuf/timestamp.proto) - 时间戳
- [google/protobuf/duration.proto](mdc:goanalysis/third_party/google/protobuf/duration.proto) - 时间间隔
- [google/protobuf/struct.proto](mdc:goanalysis/third_party/google/protobuf/struct.proto) - 动态结构

### 验证和错误处理
- [validate/validate.proto](mdc:goanalysis/third_party/validate/validate.proto) - 字段验证规则
- [errors/errors.proto](mdc:goanalysis/third_party/errors/errors.proto) - 错误处理

### OpenAPI
- [openapi/v3/annotations.proto](mdc:goanalysis/third_party/openapi/v3/annotations.proto) - OpenAPI注解
- [openapi/v3/openapi.proto](mdc:goanalysis/third_party/openapi/v3/openapi.proto) - OpenAPI规范

## API设计原则

### 1. 统一的消息格式
```protobuf
// 标准请求格式
message XxxRequest {
// 请求参数
}

// 标准响应格式
message XxxResponse {
// 响应数据
}
```

### 2. 错误处理规范
- 使用标准错误码
- 提供详细错误信息
- 支持国际化错误消息

### 3. HTTP映射规范
- RESTful URL设计
- 标准HTTP方法使用
- 统一响应格式

### 4. 版本管理
- API版本化(v1, v2等)
- 向后兼容性保证
- 渐进式废弃策略

## 代码生成

### protobuf编译
使用protoc编译器生成代码:
```bash
# 生成Go代码
protoc --go_out=. --go-grpc_out=. api/analysis/v1/analysis.proto

# 生成HTTP网关
protoc --grpc-gateway_out=. api/analysis/v1/analysis.proto
```

### 依赖管理
- 所有.pb.go文件由protoc自动生成
- 不要手动编辑生成的文件
- 更新proto文件后重新生成代码

## OpenAPI文档

项目根目录的 [openapi.yaml](mdc:goanalysis/openapi.yaml) 提供完整的API文档,包括:
- 所有API端点定义
- 请求/响应schema
- 错误码说明
- 示例数据

## 客户端集成

### Go客户端
直接导入生成的Go包:
```go
import "your-project/api/analysis/v1"
```

### 前端集成
通过HTTP API调用,配置在:
- [goanalysis-web/src/config/api.js](mdc:goanalysis/goanalysis-web/src/config/api.js)
- [goanalysis-web/src/axios.js](mdc:goanalysis/goanalysis-web/src/axios.js)

## 开发工作流

1. **修改proto文件** - 在对应的.proto文件中定义API
2. **生成代码** - 运行protoc生成Go代码
3. **实现服务** - 在service层实现业务逻辑
4. **注册服务** - 在server层注册gRPC和HTTP服务
5. **更新文档** - 更新OpenAPI文档
6. **前端适配** - 更新前端API调用代码

85 changes: 85 additions & 0 deletions .cursor/rules/backend-architecture.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
description:
globs:
alwaysApply: false
---
# 后端架构指南

## 架构概览

GoAnalysis后端采用清洁架构设计,分层明确,职责分离。主要分为以下层次:

## 核心架构层次

### API层 ([api/](mdc:api))
- **analysis** - [api/analysis/v1/](mdc:api/analysis/v1/) 核心分析服务API
- **filemanager** - [api/filemanager/v1/](mdc:api/filemanager/v1/) 文件管理API
- **staticanalysis** - [api/staticanalysis/v1/](mdc:api/staticanalysis/v1/) 静态分析API

每个API包含:
- `.proto` - protobuf定义文件
- `.pb.go` - 生成的Go结构体
- `_grpc.pb.go` - gRPC服务接口
- `.pb.gw.go` - HTTP网关代码

### 业务逻辑层 ([internal/biz/](mdc:internal/biz))

#### 核心业务模块

- **analysis** - [internal/biz/analysis/](mdc:internal/biz/analysis/) 分析引擎核心逻辑
- **callgraph** - [internal/biz/callgraph/](mdc:internal/biz/callgraph/) 调用图构建和分析
- [program.go](mdc:internal/biz/callgraph/program.go) - 程序分析入口
- [node_manager.go](mdc:internal/biz/callgraph/node_manager.go) - 节点管理
- [edge_manager.go](mdc:internal/biz/callgraph/edge_manager.go) - 边关系管理
- [filter.go](mdc:internal/biz/callgraph/filter.go) - 过滤逻辑
- **gitanalysis** - [internal/biz/gitanalysis/](mdc:internal/biz/gitanalysis/) Git代码变更分析
- [gitanalysis.go](mdc:internal/biz/gitanalysis/gitanalysis.go) - Git分析核心
- [mr_analyzer.go](mdc:internal/biz/gitanalysis/mr_analyzer.go) - MR分析器
- [llm.go](mdc:internal/biz/gitanalysis/llm.go) - LLM集成
- **staticanalysis** - [internal/biz/staticanalysis/](mdc:internal/biz/staticanalysis/) 静态代码分析
- **filemanager** - [internal/biz/filemanager/](mdc:internal/biz/filemanager/) 文件管理
- **rewrite** - [internal/biz/rewrite/](mdc:internal/biz/rewrite/) 代码重写

#### 实体定义 ([internal/biz/entity/](mdc:internal/biz/entity))
- [analysis.go](mdc:internal/biz/entity/analysis.go) - 分析相关实体
- [callgraph.go](mdc:internal/biz/entity/callgraph.go) - 调用图实体
- [file.go](mdc:internal/biz/entity/file.go) - 文件实体
- [gitlab.go](mdc:internal/biz/entity/gitlab.go) - GitLab集成实体

### 服务层 ([internal/service/](mdc:internal/service))
- [analysis.go](mdc:internal/service/analysis.go) - 分析服务实现
- [staticanalysis.go](mdc:internal/service/staticanalysis.go) - 静态分析服务
- [filemanager.go](mdc:internal/service/filemanager.go) - 文件管理服务

### 服务器层 ([internal/server/](mdc:internal/server))
- [http.go](mdc:internal/server/http.go) - HTTP服务器配置
- [grpc.go](mdc:internal/server/grpc.go) - gRPC服务器配置
- [handler.go](mdc:internal/server/handler.go) - 处理器注册

### 命令行工具 ([cmd/](mdc:cmd))
- [commands/server.go](mdc:cmd/commands/server.go) - 服务器启动命令
- [commands/callgraph.go](mdc:cmd/commands/callgraph.go) - 调用图分析命令
- [commands/git.go](mdc:cmd/commands/git.go) - Git分析命令
- [commands/rewrite.go](mdc:cmd/commands/rewrite.go) - 代码重写命令

## 依赖注入

项目使用wire进行依赖注入:
- [cmd/commands/wire.go](mdc:cmd/commands/wire.go) - Wire配置
- [cmd/commands/wire_gen.go](mdc:cmd/commands/wire_gen.go) - 生成的依赖注入代码

## 配置管理

- [internal/conf/](mdc:internal/conf/) - 配置相关protobuf定义
- [configs/config.yaml](mdc:configs/config.yaml) - 应用配置文件

## 工具包

- [internal/pkg/logger/](mdc:internal/pkg/logger/) - 统一日志包

## 关键设计原则

1. **分层架构** - API -> Service -> Biz -> Entity,职责清晰
2. **依赖倒置** - 高层模块不依赖低层模块,都依赖抽象
3. **protobuf优先** - 所有API使用protobuf定义,支持gRPC和HTTP
4. **命令行友好** - 提供丰富的CLI工具用于分析和操作
Loading
Loading