Codebase rewritten to:
tangled.org/atpasser.poxiao-labs.work/atpasser
1# ATProto Data 和 Lexicon 模块架构总览
2
3## 项目概述
4
5本项目为 ATProto (Authenticated Transfer Protocol) 提供 Python 实现,专注于数据模型和 Lexicon 定义的处理。基于现有的 URI 模块架构模式,提供类型安全的数据验证、序列化和 Lexicon 解析功能。
6
7## 整体架构设计
8
9### 1. 系统架构图
10
11```mermaid
12graph TB
13 subgraph "ATProto 核心模块"
14 URI[URI 模块]
15 Data[Data 模块]
16 Lexicon[Lexicon 模块]
17 end
18
19 subgraph "外部依赖"
20 Pydantic[Pydantic]
21 CBOR[cbor2]
22 CID[py-cid]
23 end
24
25 subgraph "数据流"
26 LexiconJSON[Lexicon JSON 文件]
27 RawData[原始数据]
28 end
29
30 LexiconJSON --> Lexicon
31 Lexicon --> Data
32 RawData --> Data
33 Data --> Serialized[序列化数据]
34
35 URI --> Data
36 URI --> Lexicon
37
38 Pydantic --> Data
39 Pydantic --> Lexicon
40 CBOR --> Data
41 CID --> Data
42```
43
44### 2. 模块职责划分
45
46#### 2.1 Data 模块 (`src/atpasser/data`)
47- **数据序列化**: JSON 和 DAG-CBOR 格式的序列化/反序列化
48- **数据验证**: 类型验证、格式验证、约束验证
49- **特殊类型处理**: CID 链接、Blob 引用、日期时间格式等
50- **错误处理**: 详细的验证错误和序列化错误
51
52#### 2.2 Lexicon 模块 (`src/atpasser/lexicon`)
53- **定义解析**: 解析 Lexicon JSON 定义文件
54- **模型生成**: 动态生成 Pydantic 模型类
55- **引用解析**: 处理跨定义引用和联合类型
56- **注册管理**: 模型注册表和缓存管理
57- **兼容性验证**: 前向和后向兼容性检查
58
59### 3. 核心功能特性
60
61#### 3.1 类型安全
62- 基于 Pydantic 的强类型系统
63- 运行时类型验证
64- 自动类型转换和规范化
65
66#### 3.2 格式支持
67- **JSON**: 符合 ATProto JSON 编码规范
68- **DAG-CBOR**: 支持规范的 DAG-CBOR 编码
69- **混合格式**: 支持两种格式间的转换
70
71#### 3.3 验证系统
72- 语法验证 (基础数据类型)
73- 语义验证 (业务规则和约束)
74- 格式验证 (字符串格式如 datetime、uri、did 等)
75- 引用验证 (CID、blob、跨定义引用)
76
77### 4. 集成架构
78
79#### 4.1 与现有 URI 模块的集成
80
81```python
82# 示例:URI 与 Data 模块的集成
83from atpasser.uri import URI, NSID
84from atpasser.data import ATProtoSerializer
85from atpasser.lexicon import LexiconRegistry
86
87# 解析 URI
88uri = URI("at://example.com/com.example.blog.post/123")
89
90# 根据 NSID 获取对应的数据模型
91model_class = LexiconRegistry.get_model(uri.collection.nsid)
92
93# 使用 Data 模块处理数据
94serializer = ATProtoSerializer()
95data = serializer.from_json(raw_data, model_class)
96```
97
98#### 4.2 数据流架构
99
100```
101原始数据 → Data 模块验证 → Lexicon 模型转换 → 序列化输出
102Lexicon JSON → Lexicon 模块解析 → 生成 Pydantic 模型 → 注册到注册表
103```
104
105### 5. 错误处理架构
106
107#### 5.1 统一的错误体系
108
109```python
110class ATProtoError(Exception):
111 """基础错误类"""
112 pass
113
114class DataError(ATProtoError):
115 """数据相关错误"""
116 pass
117
118class LexiconError(ATProtoError):
119 """Lexicon 相关错误"""
120 pass
121
122class URIError(ATProtoError):
123 """URI 相关错误"""
124 pass
125```
126
127#### 5.2 错误诊断
128- **字段级错误定位**: 精确到具体字段的路径信息
129- **上下文信息**: 包含验证时的输入数据和期望格式
130- **建议修复**: 提供具体的修复建议
131
132### 6. 性能优化策略
133
134#### 6.1 缓存机制
135- **模型缓存**: 缓存已解析的 Lexicon 模型
136- **序列化缓存**: 缓存序列化结果
137- **引用解析缓存**: 缓存跨定义引用解析结果
138
139#### 6.2 懒加载
140- 按需解析 Lexicon 定义
141- 延迟模型生成直到实际使用
142- 动态导入依赖模块
143
144### 7. 扩展性设计
145
146#### 7.1 插件系统
147- 支持自定义类型处理器
148- 支持自定义验证规则
149- 支持自定义序列化格式
150
151#### 7.2 中间件支持
152- 预处理钩子 (数据清洗、转换)
153- 后处理钩子 (日志记录、监控)
154- 验证钩子 (自定义验证逻辑)
155
156### 8. 实施路线图
157
158#### 阶段 1: 基础实现 (2-3 周)
159- 实现 Data 模块基础类型和 JSON 序列化
160- 实现 Lexicon 模块基础解析器
161- 建立基本的错误处理系统
162
163#### 阶段 2: 完整功能 (3-4 周)
164- 添加 CBOR 序列化支持
165- 实现完整的验证系统
166- 添加引用解析和联合类型支持
167
168#### 阶段 3: 优化增强 (2 周)
169- 实现缓存和性能优化
170- 添加高级格式验证
171- 完善错误处理和诊断信息
172
173#### 阶段 4: 测试部署 (1-2 周)
174- 编写完整的测试套件
175- 性能测试和优化
176- 文档编写和示例代码
177
178### 9. 依赖管理
179
180#### 9.1 核心依赖
181- `pydantic >=2.11.9`: 数据验证和模型定义
182- `cbor2 >=5.7.0`: CBOR 序列化支持
183- `py-cid >=0.3.0`: CID 处理支持
184
185#### 9.2 可选依赖
186- `jsonpath-ng >=1.7.0`: JSONPath 支持
187- `langcodes >=3.5.0`: 语言代码验证
188
189### 10. 质量保证
190
191#### 10.1 测试策略
192- **单元测试**: 覆盖所有核心功能
193- **集成测试**: 测试模块间集成
194- **兼容性测试**: 确保与规范兼容
195- **性能测试**: 验证性能指标
196
197#### 10.2 代码质量
198- 类型注解覆盖率达到 100%
199- 测试覆盖率超过 90%
200- 遵循 PEP 8 编码规范
201- 详细的文档和示例
202
203## 总结
204
205本架构设计提供了一个完整、可扩展的 ATProto 数据处理解决方案,充分利用了 Python 的类型系统和现有生态,同时保持了与 ATProto 规范的完全兼容性。模块化的设计使得各个组件可以独立开发和测试,同时也便于未来的扩展和维护。