API 适配器
默认数据流是:
Page -> module query composable -> API adapter -> api/mock data or user API这样可以让 pages 远离 transport 细节,也让 server/cache state 留在 TanStack Query,而不是 Pinia。
文件位置
apps/admin/src/api/
users.api.ts
dashboard.api.ts
workbench.api.ts
access.api.ts
mock/
users.mock.ts
dashboard.mock.ts
workbench.mock.ts
access.mock.ts
apps/admin/src/modules/users/
users.queries.ts
users.types.ts只替换 Adapter
当示例页面已经符合你的业务工作流时,只需要把模块 API adapter 替换成你的 API 调用,并把响应归一化为模块 frontend type。
export async function listUsers(params: UserListParams): Promise<UserListResult> {
const response = await fetch('/api/users')
const rows = await response.json()
return {
items: rows.map(normalizeUser),
total: rows.length,
page: params.page,
pageSize: params.pageSize
}
}具体 transport 由你决定。REST、RPC、GraphQL 或自定义 SDK 都可以放在 adapter 后面,只要 pages 继续调用 module queries。
Super Admin 面向开源和局部采用设计。你可以只使用 UI primitives、复制一个示例模块,或替换所有 API adapters,而不必采用未来的 backend、CLI、auth、database 或 provider 工作。
完整重塑模块
如果你的业务工作流不同,不要强行把 API 塞进示例 shape。请一起重塑:
- page 和 module components
- module types
- query params
- query composables
- API adapter
示例 module types 是前端示例 contracts,不是通用 backend schemas。
Contract Helpers
@super-admin-org/core 暴露了少量 TypeScript-first contract helpers,用于常见 adapter shape:
createPageListResult:page-based admin tablescreateCursorListResult:stream-like listscreateMutationSuccess和createMutationFailure:结构化 mutation feedbacknormalizeAdapterError:小型 UI-facing error payloads
这些 helpers 是可选的。它们不会引入 runtime schema library,也不要求你的后端匹配示例模块。
Mock Data
Mock data 放在 apps/admin/src/api/mock/。Mock files 可以使用模拟 API field names。API adapters 负责把这些 shapes 适配成 module frontend types。
不要让 api/mock import module types。这个分离会让 mock data 更像外部数据源,也让 adapter boundary 更诚实。