本文档详细介绍了 AFFiNE 后端服务器的实现、其 GraphQL API 和核心服务。它涵盖了服务器架构、API 设计以及为应用程序的后端功能提供动力的各种子系统。
AFFiNE 服务器主要使用 NestJS 作为框架构建,并通过 GraphQL API 与客户端进行通信。该服务器为用户身份验证、工作区管理、文档处理、AI 功能和存储操作提供核心功能。
来源
该服务器实现为一个模块化的 NestJS 应用程序,具有明确的关注点分离。该架构遵循 NestJS 的约定,包括模块、控制器、服务和解析器。
来源
服务器主要通过 GraphQL API 暴露其功能,该 API 使用 Apollo Server 和 NestJS 的 GraphQL 集成进行构建。
来源
AFFiNE 使用 PostgreSQL 作为其主要数据库,并使用 Prisma 作为 ORM。数据库模式包括用户、工作区、文档、AI 会话和其他核心实体的表。
关键数据库模型包括:
| 模型 | 描述 |
|---|---|
| 用户 | 用户账户、身份验证和个人设置 |
| 工作区 | 包含文档的协作工作区 |
| WorkspaceDoc | 带有元数据的用户文档 |
| WorkspaceUserRole | 用户在工作区内的权限 |
| Snapshot | 文档状态快照 |
| AiSession | AI 聊天会话 |
| AiPrompt | AI 提示模板 |
| Blob | 二进制资产和附件 |
来源
Copilot AI 服务是一个复杂的系统,它为 AFFiNE 提供 AI 功能,包括文本生成、图像生成和其他 AI 功能。
Copilot 系统旨在处理各种 AI 功能,包括:
来源
Copilot 系统通过复杂的架构管理 AI 聊天会话,该架构处理消息处理、令牌管理和提供商选择。
来源
Copilot 系统通过可扩展的提供商架构支持多个 AI 提供商。
来源
服务器通过 GraphQL API 与客户端进行交互。该模式定义了各种操作的查询、突变、类型和输入类型。
| 类型 | 描述 |
|---|---|
| Mutation | 定义修改数据(创建、更新、删除)的操作 |
| 查询 | 定义检索数据而不产生副作用的操作 |
| UserType | 代表系统中的用户 |
| WorkspaceType | 代表一个工作区 |
| DocType | 代表工作区中的文档 |
| Copilot | 代表 AI Copilot 系统 |
| CopilotContext | 代表 AI 操作的上下文信息 |
| CopilotPromptType | 定义 AI 提示模板 |
GraphQL API 提供大量操作,包括:
来源
AFFiNE 服务器包含用 Rust 编写的本机模块,为计算密集型任务提供高性能功能。
服务器本机模块提供:
来源
AFFiNE 服务器可在各种环境中运行,从本地开发到生产部署。
服务器使用环境变量进行配置,开发、测试和生产环境具有不同的设置。
关键配置区域包括:
可以使用以下命令构建和运行服务器:
来源
服务器利用 Rust 通过本机模块实现高性能操作。Rust 组件已构建并集成到 Node.js 服务器中。
关键 Rust 包包括:
affine_common - 共享实用程序affine_server_native - 服务器特定的本机功能来源
服务器 API 设计用于与移动客户端协同工作,并特别考虑了移动平台。Android 应用程序通过相同的 GraphQL API 与服务器通信。
来源
AFFiNE 服务器为 AFFiNE 应用程序提供了一个强大、可扩展的后端,具有全面的 GraphQL API、AI 集成和本机性能优化。模块化架构允许轻松扩展和维护,同时提供丰富的功能,用于协作、文档管理和 AI 功能。