API、数据与基础设施
new-api 同源技术栈与多仓服务协议
技术栈完全对齐 new-api
这是当前确定的实现约束,不再作为候选选型讨论。Core/Edge 使用同一固定基线的 Go 工具链、Gin、GORM、Redis/go-redis、decimal、相关鉴权和测试工具;保留 go.mod/go.sum 中所需依赖版本。前端沿用同版 React/TypeScript/Rsbuild/TanStack/Tailwind/shadcn/Base UI 工具链及锁文件约束,视觉继续使用 OceanWay 风格。
仅提取该仓职责所需依赖,不要求 Core 装入全部供应 SDK 或要求纯 Go Edge 附带前端。数据库选择在 new-api 已支持的驱动内确定,不额外换 ORM/语言/框架。现有产品和 Docs 工程未在本轮执行迁移,目标一致与现状是否一致分别记录。
本轮核验 go.mod 中 Go 1.25.1、Gin 1.9.1、GORM 1.25.12、go-redis/v8 8.11.5、decimal 1.4.0;具体版本以固定源码文件为准,不凭当前页面更新去追逐移动 main。
技术栈
| 层 | 当前选择与边界 |
|---|---|
| 新 Core/Edge/Worker | Go + Gin;参考 new-api 已有实现,不沿用旧 TypeScript 服务作为默认基线 |
| 数据访问 | GORM;建议 PostgreSQL 作为客户主库,具体版本和部署由运行验证固定 |
| 缓存与限流 | Redis;不能成为客户余额或任务事实的唯一存储 |
| 前端 | React、TypeScript、Rsbuild、TanStack Router/Query/Table、Tailwind CSS 4、shadcn/Base UI |
| 契约 | HTTP/JSON、OpenAPI、版本化事件与 Go/TypeScript 客户端;流式协议单独明确 |
| 文件 | S3 兼容对象存储接口,供应与预算另定 |
| 运行 | 独立服务进程;Worker 可同仓不同进程,初期不强制 Kafka、Temporal、Kubernetes |
固定来源为官方提交 385d2dfd10d821b25c8a6766bd16eea248cb1652,该提交 go.mod 声明 Go 1.25.1。它是已经检查的参考,不声称是当前最新生产版本。来源:go.mod、前端依赖、组件配置。
已有 Docs/Design/媒体工程和用户安排的原型不在本轮覆盖改写,接入时核对版本与差异。参考实现不等于跨仓直接 import 上游内部包。
接口与事务
Core 提供授权与额度预留、用量结算、释放/核对、操作查询、任务命令等能力;已有客户与公共模型接口优先沿用 new-api 的名称、路由与数据结构;只有拆分后新增的内部能力才在 Contracts 定义新接口。Edge 用内部服务身份调用,所有客户参数均需由 Core 验证归属。
HTTP 响应丢失时按稳定操作标识查询结果。幂等键限定账户和命令范围,绑定请求摘要;相同键不同请求冲突。预留与账务变更在 Core 事务内完成,供应执行不在数据库事务内。记录可恢复状态与必要 Outbox,跨服务不依赖一个分布式事务。