用户数据管理 API 服务 - 开发文档
一套为小程序、APP、Web 应用提供用户管理、数据存储、团队协作等功能的完整 API 服务。
1. 项目概述
1.1 简介
本系统是一套完整的用户数据管理 API 服务,为你的应用提供开箱即用的后端能力。你无需从零搭建用户系统,只需调用 API 即可实现:
- 用户认证:账号密码注册登录、微信小程序一键登录
- 数据存储:自定义用户数据字段,灵活存储各类业务数据
- 团队协作:创建团队、成员管理、自定义字段、权限控制
- 数据分享:生成分享码,安全分享用户数据
- 游客模式:未登录用户也可访问公开数据
1.2 适用场景
| 开发者类型 | 适用场景 |
|---|---|
| ------- | -------------- |
| 小程序开发者 | 微信小程序用户管理、数据存储 |
| APP 开发者 | 多平台用户统一认证、数据同步 |
| Web 开发者 | 用户系统快速搭建、数据管理 |
1.3 功能特性
| 功能 | 说明 |
|---|---|
| ---- | ------------------------ |
| 项目管理 | 支持多项目隔离,每个项目独立配置和数据 |
| 项目成员 | 支持普通用户(账号密码)和微信用户(小程序授权) |
| 项目字段 | 支持自定义用户数据字段和项目数据字段,统一管理 |
| 字段分组 | 支持字段归类、批量获取、访问控制 |
| 数据加密 | 支持字段级 AES / RSA 加密传输 |
| 数据分享 | 支持生成分享码分享用户数据 |
| 项目团队 | 支持创建团队、成员管理、自定义字段、数据协作 |
| 游客模式 | 支持未登录用户通过临时 Token 访问公开数据 |
| 访问控制 | 支持 IP 限制、频率限制、登录限制 |
| 邮箱验证 | 支持邮箱验证功能 |
1.4 系统架构
┌─────────────────────────────────────────────────────┐
│ 客户端应用 │
│ (小程序 / APP / Web 应用) │
└───────────────────┬─────────────────────────────────┘
│ HTTP API
▼
┌─────────────────────────────────────────────────────┐
│ API 服务端 │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 认证接口 │ │ 用户接口 │ │ 项目接口 │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 分享接口 │ │ 团队接口 │ │ 游客接口 │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ ┌───────────────────────────────────────────┐ │
│ │ 字段配置系统 │ │
│ │ 用户字段 │ 项目字段 │ 团队字段 │ │
│ └───────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
1.5 文档导航
| 我想... | 查看章节 |
|---|---|
| ----------- | ----------------------------------- |
| 了解基本概念和认证方式 | 核心概念 |
| 测试 API 是否通 | 快速开始 → 第一个 API 调用 |
| 实现用户注册登录 | API 参考 → 认证接口 |
| 存储用户数据 | API 参考 → 用户数据接口 |
| 创建团队 | API 参考 → 团队接口 |
| 分享数据 | API 参考 → 分享接口 |
| 微信小程序登录 | 使用场景示例 → 微信小程序登录 |
| 查询错误含义 | 错误码参考 |
2. 快速开始
2.1 环境准备
在开始之前,确保你拥有:
- 有效的 API Key(联系管理员获取)
- 了解你的应用需要的用户数据字段
- 开发环境支持 HTTP 请求
2.2 获取 API Key
- 登录管理后台
- 进入"项目管理"
- 创建或编辑项目配置
- 复制 API Key
2.3 第一个 API 调用
以下是一个简单的连通性测试:
请求:
GET /api/ping HTTP/1.1
Host: your-domain.com
响应:
{
"code": 200,
"message": "pong",
"timestamp": 1773842113,
"trace_id": "abc123...",
"data": {
"time": 1773842113
}
}
2.4 快速开始流程
1. 获取 API Key → 联系管理员
2. 测试连通性 → GET /api/ping
3. 配置数据字段 → 后台"项目字段管理"
4. 用户注册/登录 → POST /api/auth/register 或 /api/auth/login
5. 获取/更新用户数据 → GET / PUT /api/user/field-values
6. 实现心跳保活 → GET /api/auth/heartbeat
3. 核心概念
3.1 认证体系
系统提供三层认证机制,从宽松到严格逐级叠加:
┌──────────────┐
│ API Key │ ← 所有业务接口必须携带,用于识别项目
├──────────────┤
│ User Token │ ← 需要用户身份的接口额外携带
├──────────────┤
│ IP 校验 │ ← 可选开启,绑定 Token 与请求 IP
└──────────────┘
3.1.1 API Key 认证
所有业务 API 请求都需要在 Header 中携带 API Key,系统据此识别所属项目:
X-API-Key: your_project_api_key
不含 API Key 的请求将返回
401错误。
3.1.2 Token 认证
需要用户身份的接口(如读写用户数据)额外携带 User Token:
X-API-Key: your_project_api_key
X-User-Token: user_token_here
Token 通过登录接口获取,可以是用户 Token 或游客 Token,系统通过 Token 前缀自动区分身份。
3.1.3 游客模式
未登录用户可以通过领取临时游客 Token 访问标记为 require_auth = 0 的公开字段:
| 特性 | 说明 |
|---|---|
| ---- | ------------------------------------------------- |
| 获取方式 | 通过 /api/auth/login(不提供账号密码)或 /api/guest/token |
| 认证方式 | 与用户共用 X-User-Token 头,通过 guest_ 前缀自动区分 |
| 有效期 | 可配置过期时间和最大请求次数 |
| 权限 | 仅访问公开字段;显式请求需登录字段时返回 403;按分组请求时静默过滤 |
3.2 Token 机制
3.2.1 Token 格式
| 类型 | 格式 | 说明 |
|---|---|---|
| -------- | --------------------------------- | --------------- |
| standard | 随机字符串 | 直接存储,查询验证 |
| hmac | randomToken.timestamp.signature |
需配合 HMAC 密钥验证签名 |
3.2.2 Token 过期与刷新
| 值 | 说明 |
|---|---|
| -------- | ----- |
-1 |
永不过期 |
| Unix 时间戳 | 过期时间点 |
| 登录方式 | 是否刷新 Token | 备注 |
|---|---|---|
| ----------- | ---------- | ---------------------- |
| 账号密码登录 | 取决于项目配置 | 密码正确 |
| 微信 Code 登录 | 取决于项目配置 | Code 有效 |
| 微信 Token 登录 | 始终刷新 | 即使 Token 过期,用户状态正常即可续期 |
3.3 用户类型
3.3.1 普通用户
- 通过账号密码注册和登录
- 支持修改密码、忘记密码
- 支持邮箱验证
3.3.2 微信用户
- 通过微信小程序授权登录(必须使用
/api/auth/wechat) - 无密码,无法使用账号密码登录
- 无法使用忘记密码功能
account字段返回wechat_user(不暴露真实 openid)
3.4 字段与分组
3.4.1 字段类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| -------- | ------- | --------- |
| varchar | 短文本 | 昵称、邮箱、手机号 |
| text | 长文本 | 简介、描述 |
| int | 整数 | 年龄、等级、积分 |
| float | 浮点数 | 分数、价格 |
| date | 日期 | 生日 |
| datetime | 日期时间 | 注册时间 |
| boolean | 布尔值 | 开关状态 |
| json | JSON 对象 | 复杂配置 |
3.4.2 分组功能
| 功能 | 说明 |
|---|---|
| ---- | ----------------------------- |
| 字段归类 | 将相关字段组织在一起,便于管理 |
| 批量获取 | 通过 group 参数一次获取一组字段 |
| 访问控制 | 结合 require_auth 控制组内字段的访问权限 |
3.5 统一响应格式
所有 API 接口遵循统一的响应结构:
{
"code": 200,
"message": "Success",
"timestamp": 1743681193,
"trace_id": "abc123def456...",
"data": { ... }
}
| 字段 | 类型 | 说明 |
|---|---|---|
| --------- | ----------------- | ---------------- |
| code | int | 业务状态码,200 表示成功 |
| message | string | 状态描述 |
| timestamp | int | 服务端响应时间戳 |
| trace\_id | string | 请求追踪 ID,用于日志排查 |
| data | object/array/null | 响应数据体 |
为精简篇幅,下文部分接口示例仅展示
data字段内容,省略了与外层一致的时间戳和追踪 ID 字段。
4. API 参考
4.1 通用说明
| 项目 | 说明 |
|---|---|
| ------------ | ----------------------------------------- |
| 基础 URL | https://your-domain.com |
| 认证方式 | X-API-Key 头(必填)+ X-User-Token 头(按需) |
| Content-Type | application/json(POST / PUT / PATCH 请求) |
| 字符编码 | UTF-8 |
| 频率限制 | 每个项目独立配置,超限返回 429 |
各部分接口按资源分组,完整列表:
| 分组 | 接口数量 | 说明 |
|---|---|---|
| ------------------------ | ---- | ---------------- |
| 4.2 认证接口 | 11 | 注册、登录、登出、密码、邮箱验证 |
| 4.3 用户信息接口 | 1 | 获取当前用户信息 |
| 4.4 用户数据接口 | 4 | 用户自定义字段 CRUD |
| 4.5 项目接口 | 3 | 项目信息与字段定义 |
| 4.6 分享接口 | 4 | 分享码生成与使用 |
| 4.7 游客接口 | 3 | 游客 Token 管理 |
| 4.8 团队接口 | 25 | 团队、成员、角色、字段、数据管理 |
| 4.9 系统接口 | 1 | 连通性测试 |
4.2 认证接口
4.2.1 用户注册
POST /api/auth/register
创建新用户账号。
请求 Header:
X-API-Key: your_api_key
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| -------- | -- | -------------------------------------------- |
| account | 是 | 用户账号(字母、数字、下划线) |
| password | 否 | 密码(至少 8 位,含字母和数字)。不提供则创建无密码账号,后续可通过微信登录或设置密码 |
| 否 | 邮箱地址 |
请求示例:
{
"account": "user123",
"password": "password123",
"email": "user@example.com"
}
响应示例:
{
"code": 200,
"message": "Registration successful",
"data": {
"user_id": 6,
"account": "user123",
"email": "user@example.com",
"token": "18985018a96bc95dc195a07e5bf494bb",
"expires_at": 1773849313,
"has_password": true,
"token_type": "standard"
}
}
响应字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| ------------- | ----------- | ---------------------------- |
| user\_id | int | 新用户 ID |
| account | string | 用户账号 |
| string/null | 邮箱地址 | |
| token | string | 登录 Token |
| expires\_at | int | Token 过期时间戳,-1 表示永不过期 |
| has\_password | bool | 是否设置了密码 |
| token\_type | string | Token 类型:standard / hmac |
4.2.2 用户登录 / 游客 Token 领取
POST /api/auth/login
账号密码登录,或不提供任何参数领取游客 Token。
注意:微信用户无法使用此接口,必须使用 微信小程序登录。不提供
account参数时自动走游客 Token 领取流程(需项目开启游客模式)。
请求 Header:
X-API-Key: your_api_key
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ---------------------- | -- | ----------------- |
| account | 否 | 用户账号(不提供则走游客流程) |
| password | 否 | 密码(有密码的账号必填) |
| include\_user\_info | 否 | 是否返回用户基本信息 |
| include\_user\_data | 否 | 是否返回用户字段数据 |
| include\_project\_data | 否 | 是否返回项目字段数据 |
| user\_data\_fields | 否 | 指定返回的用户数据字段(逗号分隔) |
| user\_data\_group | 否 | 按分组返回用户数据字段(逗号分隔) |
| project\_data\_fields | 否 | 指定返回的项目数据字段(逗号分隔) |
| project\_data\_group | 否 | 按分组返回项目数据字段(逗号分隔) |
请求示例(用户登录):
{
"account": "user123",
"password": "password123",
"include_user_info": true,
"include_user_data": true
}
请求示例(游客 Token 领取):
{}
响应示例(用户登录):
{
"code": 200,
"message": "Login successful",
"data": {
"user_id": 4,
"account": "user123",
"email": "user@example.com",
"token": "2e371f414860a99a601bb3321557267f",
"expires_at": -1,
"has_password": true,
"token_type": "standard",
"is_new_user": false,
"user_info": {
"id": 4,
"account": "user123",
"email": "user@example.com",
"email_verified": 0,
"status": 1,
"last_login_at": "2026-03-18 21:53:12",
"last_heartbeat_at": "2026-03-18 21:53:12",
"created_at": "2026-03-18 21:53:12"
},
"user_data": [],
"project_data": {}
}
}
响应示例(游客 Token 领取):
{
"code": 200,
"message": "Guest token created successfully",
"data": {
"guest": true,
"token": "guest_xxxxxx...",
"expires_at": "2026-05-02 19:10:41",
"max_requests": 100
}
}
4.2.3 微信小程序登录
POST /api/auth/wechat
微信小程序登录,支持 Code 登录和 Token 续期两种模式。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token // 可选,Token 登录模式使用
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ---------------------- | ----------- | ----------------- |
| code | 与 Token 二选一 | 微信登录凭证 |
| encryptedData | 否 | 加密用户数据 |
| iv | 否 | 加密算法的初始向量 |
| include\_user\_info | 否 | 是否返回用户基本信息 |
| include\_user\_data | 否 | 是否返回用户数据 |
| include\_project\_data | 否 | 是否返回项目数据 |
| user\_data\_fields | 否 | 指定返回的用户数据字段(逗号分隔) |
| user\_data\_group | 否 | 按分组返回用户数据字段(逗号分隔) |
| project\_data\_fields | 否 | 指定返回的项目数据字段(逗号分隔) |
| project\_data\_group | 否 | 按分组返回项目数据字段(逗号分隔) |
登录模式:
| 模式 | 适用场景 |
|---|---|
| -------- | ------------------- |
| Token 登录 | 已知 Token(即使已过期也可续期) |
| Code 登录 | 新用户注册或 Token 不可用 |
响应示例:
{
"code": 200,
"message": "WeChat authentication successful",
"data": {
"user_id": 1,
"account": "wechat_xxx",
"email": "user@example.com",
"token": "token_here...",
"token_expires_at": -1,
"has_password": false,
"token_type": "standard",
"is_new_user": false,
"user_info": {
"id": 1,
"account": "wechat_xxx",
"email": "user@example.com",
"email_verified": 0,
"status": 1,
"last_login_at": "2026-04-17 20:30:00",
"last_heartbeat_at": "2026-04-17 20:30:00",
"created_at": "2026-04-17 10:00:00"
},
"user_data": {
"nickname": "用户昵称",
"avatar": "https://example.com/avatar.png"
},
"project_data": {
"default_setting": {"key": "value"}
}
}
}
4.2.4 用户退出
POST /api/auth/logout
用户主动退出登录,清理 Token、IP 等登录信息。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Logout successful",
"data": null
}
4.2.5 心跳检测
GET /api/auth/heartbeat
更新用户活跃时间,保持在线状态。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Heartbeat successful",
"data": {
"status": "online",
"last_heartbeat": "2026-04-11 10:47:22",
"expires_at": -1,
"is_online": true
}
}
4.2.6 忘记密码
POST /api/auth/forgot-password
发送密码重置邮件。微信用户无法使用此功能。
请求 Header:
X-API-Key: your_api_key
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------- | -- | -------- |
| account | 是 | 用户账号 |
| 是 | 注册时使用的邮箱 |
响应示例:
{
"code": 200,
"message": "Password reset link generated",
"data": {
"message": "密码重置邮件已发送,请查收"
}
}
4.2.7 重置密码
POST /api/auth/reset-password (也支持 GET)
使用重置令牌设置新密码。GET 请求返回 HTML 表单页面,POST 请求处理密码重置。
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------------- | -- | ----------------------- |
| reset\_token | 是 | 密码重置令牌(URL 参数或 POST 传递) |
| new\_password | 是 | 新密码(至少 8 位,含字母和数字) |
响应示例:
{
"code": 200,
"message": "密码重置成功",
"data": {
"message": "密码重置成功,请使用新密码登录"
}
}
4.2.8 修改密码(auth 路径)
POST /api/auth/change-password
已登录用户修改密码。微信用户无法使用。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------------- | -- | ------------------ |
| old\_password | 是 | 当前密码 |
| new\_password | 是 | 新密码(至少 8 位,含字母和数字) |
响应示例:
{
"code": 200,
"message": "Password changed successful",
"data": {
"message": "密码修改成功"
}
}
4.2.9 发送验证邮件
POST /api/auth/send-verify-email
向已登录用户发送邮箱验证邮件。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Verification email sent",
"data": {
"message": "验证邮件已发送"
}
}
4.2.10 验证邮箱
GET /api/auth/verify-email
通过邮件中的验证链接完成邮箱验证。
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ----------- | -- | ------ |
| token | 是 | 邮箱验证令牌 |
| project\_id | 是 | 项目 ID |
响应示例:
{
"code": 200,
"message": "Email verified successfully",
"data": {
"message": "邮箱验证成功"
}
}
4.3 用户信息接口
4.3.1 获取用户信息
GET /api/user/info
获取当前登录用户的详细信息。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Success",
"data": {
"user": {
"id": 1,
"account": "user123",
"email": "user@example.com",
"email_verified": 0,
"status": 1,
"last_login_at": "2024-01-01 12:00:00",
"last_heartbeat_at": "2024-01-01 12:30:00",
"created_at": "2024-01-01 00:00:00"
}
}
}
4.4 用户数据接口
用户数据接口实现自定义字段的完整 CRUD 操作。字段定义由后台管理员配置,客户端通过以下接口读写数据。
游客亦可调用这些接口,通过
X-User-Token携带游客 Token,系统仅返回require_auth = 0的公开字段。
4.4.1 获取用户数据
GET /api/user/field-values
获取当前用户的自定义字段数据。游客模式下仅返回公开字段。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------ | -- | -------------------- |
| fields | 否 | 指定获取的字段名(逗号分隔) |
| group | 否 | 按分组获取字段(逗号分隔的分组 key) |
响应示例(用户):
{
"code": 200,
"message": "Success",
"data": {
"user_id": 1,
"account": "user123",
"email": "user@example.com",
"data": {
"nickname": "张三",
"avatar": "https://example.com/avatar.jpg",
"phone": "13800138000"
}
}
}
响应示例(游客):
{
"code": 200,
"message": "Success",
"data": {
"guest": true,
"data": {
"site_title": "我的项目",
"announcement": "欢迎访问!"
},
"request_count": 2,
"max_requests": 100
}
}
游客访问控制规则:
| 请求方式 | 需登录字段处理 | 说明 |
|---|---|---|
| ------------------ | ----------- | ----------- |
通过 fields 参数显式指定 |
返回 403 错误 |
提示哪些字段需要登录 |
通过 group 参数按分组 |
静默过滤 | 仅返回公开字段,不报错 |
| 不指定参数(获取全部) | 静默过滤 | 仅返回公开字段 |
游客显式请求需登录字段时的错误响应:
{
"code": 403,
"message": "The following fields require authentication: phone, email. Please login to access these fields."
}
4.4.2 更新用户数据(全量)
PUT /api/user/field-values
全量更新用户字段数据。需提供所有必填字段,未提供的字段将被清空。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求示例:
{
"nickname": "新昵称",
"avatar": "https://new-avatar.jpg"
}
响应示例:
{
"code": 200,
"message": "Data updated successfully",
"data": null
}
4.4.3 更新用户数据(部分)
PATCH /api/user/field-values
部分更新用户字段数据。仅更新提供的字段,未提供的字段保持不变。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求示例:
{
"nickname": "新昵称"
}
响应示例:
{
"code": 200,
"message": "Data updated successfully",
"data": null
}
4.4.4 删除用户数据字段
DELETE /api/user/field-values
删除用户指定的某个字段数据。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ----------- | -- | ------- |
| field\_name | 是 | 要删除的字段名 |
请求示例:
{
"field_name": "custom_field1"
}
响应示例:
成功删除数据(字段存在且有数据):
{
"code": 200,
"message": "Data deleted successfully",
"data": null
}
删除不存在的数据(字段不存在或已被删除):
{
"code": 200,
"message": "Field does not exist or has been deleted",
"data": null
}
4.5 项目元数据接口
4.5.1 获取项目信息
GET /api/project
获取当前项目基本信息。
请求 Header:
X-API-Key: your_api_key
响应示例:
{
"code": 200,
"message": "Success",
"data": {
"project": {
"id": 1,
"name": "我的项目",
"status": 1,
"created_at": "2026-04-01 09:00:00"
}
}
}
4.5.2 获取项目公共配置数据(非用户数据)
GET /api/project/data
⚠️ 重要:请勿与用户信息接口混淆
| 接口 | 用途 | 返回内容示例 |
|------|------|-------------|
|
GET /api/project/data✅ 本接口 | 获取项目级公共配置(全局共享的字段默认值) | 网站标题、Logo、公告等项目级别的配置项 ||
GET /api/user/info| 获取当前登录用户的账号资料 | 用户 ID、账号、邮箱、注册时间等个人信息 ||
GET /api/user/field-values| 获取当前登录用户的自定义字段值 | 昵称、头像、手机号等用户填写的个人数据 |简单记忆:路径含
/project/→ 项目配置;路径含/user/→ 用户数据
本项目级接口用于获取管理员在后台配置的项目公共字段(所有用户共享的全局配置),而非某个用户的个人数据。支持按字段或分组筛选。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token // 可选,部分字段需要
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------ | -- | -------------- |
| fields | 否 | 指定返回的字段(逗号分隔) |
| group | 否 | 指定分组 key(逗号分隔) |
响应示例:
{
"code": 200,
"message": "Success",
"data": {
"fields": [
{
"field_name": "site_title",
"field_type": "varchar",
"value": "我的项目",
"is_encrypted": false,
"require_auth": false,
"description": "网站标题",
"is_required": false,
"is_readonly": false
},
{
"field_name": "site_logo",
"field_type": "varchar",
"value": "https://example.com/logo.png",
"is_encrypted": false,
"require_auth": false,
"description": "网站 Logo",
"is_required": false,
"is_readonly": false
}
]
}
}
未携带
X-User-Token时,require_auth = 1的字段不会出现在结果中,响应会增加auth_required_count字段表示因权限被隐藏的字段数量。
4.5.3 获取字段定义
GET /api/project/fields
获取项目的字段结构定义(schema),不含用户实际数据。
请求 Header:
X-API-Key: your_api_key
响应示例:
{
"code": 200,
"message": "Success",
"data": [
{
"field_name": "nickname",
"field_type": "varchar",
"field_length": 255,
"is_required": 0,
"description": "用户昵称"
}
]
}
4.6 分享接口
4.6.1 生成分享码
POST /api/share/generate
生成分享码用于分享用户数据。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| -------------- | -- | ------------------ |
| share\_code | 否 | 自定义分享码(4-10 位字母数字) |
| fields | 否 | 分享的字段(逗号分隔) |
| groups | 否 | 分享的分组(逗号分隔) |
| max\_uses | 否 | 最大使用次数,默认 1 |
| expires\_hours | 否 | 过期小时数,默认 24 |
响应示例:
{
"code": 200,
"message": "Share code generated",
"data": {
"share_code": "ABC123",
"max_uses": 1,
"used_count": 0,
"expires_at": "2026-04-12 12:00:00",
"fields": "nickname,avatar",
"field_groups": ""
}
}
4.6.2 使用分享码
GET /api/share/use
使用分享码获取分享的数据。
请求 Header:
X-API-Key: your_api_key
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ---- | -- | --- |
| code | 是 | 分享码 |
响应示例:
{
"code": 200,
"message": "Success",
"data": {
"nickname": "张三",
"avatar": "https://example.com/avatar.jpg"
}
}
4.6.3 获取分享列表
GET /api/share/list
获取当前用户创建的所有分享码列表。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Success",
"data": [
{
"id": 1,
"share_code": "ABC123",
"fields": "nickname,avatar",
"field_groups": "",
"max_uses": 5,
"used_count": 2,
"expires_at": "2026-04-12 12:00:00",
"status": "active",
"created_at": "2026-04-11 12:00:00"
}
]
}
4.6.4 撤销分享
DELETE /api/share/:id
删除指定的分享码(不可恢复)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ------ |
| :id | 分享码 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Share revoked",
"data": null
}
4.7 游客接口
游客可通过以下独立端点管理临时 Token。大部分场景下,建议使用 登录接口统一领取,无需单独调用这些端点。
4.7.1 获取游客 Token
POST /api/guest/token
独立获取游客临时 Token,与通过 /api/auth/login 空请求体领取等效。
请求 Header:
X-API-Key: your_api_key
Content-Type: application/json
响应示例:
{
"code": 200,
"message": "ok",
"data": {
"guest": true,
"token": "guest_xxxxxx...",
"expires_at": "2026-05-02 19:10:41",
"max_requests": 100
}
}
4.7.2 验证游客 Token
GET /api/guest/token/verify
验证游客 Token 是否有效。
请求 Header:
X-API-Key: your_api_key
X-User-Token: guest_xxxxxx...
响应示例:
{
"code": 200,
"message": "ok",
"data": {
"valid": true,
"request_count": 5,
"max_requests": 100,
"expires_at": "2026-05-02 19:10:41"
}
}
4.7.3 清理过期游客 Token
GET /api/guest/token/cleanup
清理项目中所有已过期的游客 Token。
请求 Header:
X-API-Key: your_api_key
响应示例:
{
"code": 200,
"message": "ok",
"data": {
"deleted_count": 5
}
}
4.8 团队接口
团队接口提供完整的团队协作功能,包括创建、成员管理、自定义字段配置和数据存储。
4.8.0 团队接口说明
跨项目隔离
团队成员必须来自同一项目,系统自动校验 user.project_id == team.project_id。不同项目的用户无法加入同一团队,通过邀请码加入时也会校验项目归属。
认证要求
所有团队接口均需携带:
X-API-Key: your_api_key
X-User-Token: user_token
角色与权限等级
系统使用 等级制 管理角色层级,level 越小权限越大,同级不可互操作。
| 角色 | 等级 | 权限 |
|---|---|---|
| ------- | -- | ---------------------------------------------------------- |
| creator | 1 | 创建者,拥有全部权限,不可被移除,不可自行离开。唯一可管理角色定义的角色 |
| admin | 2 | 管理员,可管理下级成员(等级>2),可编辑字段和数据。不能修改其他管理员或创建者的角色 |
| member | 0 | 普通成员,可查看和编辑数据。不参与权限比较,可被任何非0等级的用户管理 |
| 自定义角色 | 5+ | 由创建者自定义,可配置独立权限和等级。等级高于 admin 的自定义角色同样受等级规则约束 |
等级规则
- 上级管理下级:操作者的
level必须 严格小于 目标成员的level,才能修改其角色或移除 - 同级不可互操作:相同
level的角色之间不能互相修改角色或移除 - 不能越级赋权:操作者只能将成员的角色修改为 自己的
level或更低(即level≥ 自己的角色) - 角色定义管理仅限创建者:创建、修改、删除角色定义仅限
creator(level=1) - 普通用户(level=0)特殊规则:
- level=0 的用户不能管理任何人
- 任何非0等级的用户都可以管理 level=0 的用户
- level=0 不参与等级比较
昵称规则
团队成员昵称必须符合以下规则:
| 规则 | 说明 | 示例 |
|---|---|---|
| ------ | ------ | ------ |
| ✅ 允许 | 中文 | 张三、小明(2-6个字符) |
| ✅ 允许 | 英文 | Alice、John_Doe(2-12个字符) |
| ❌ 禁止 | 数字/符号/空格 | 123、@#$%、hello world |
| ❌ 禁止 | 系统保留词 | 我、本人、me |
| ❌ 禁止 | 超长/太短 | A(太短)、一二三四五六七(中文超长) |
重要:昵称是展示层概念,数据库存储真实昵称值。API 返回成员列表时,当前登录用户的昵称会显示为"我"(由后端动态判断),其他成员显示真实昵称。"我"不得作为昵称存入数据库。
账号脱敏
为保护用户隐私,微信小程序用户的 account 字段在 API 响应中会自动脱敏为 wechat_user,不暴露真实的 openid。
4.8.1 创建团队
POST /api/team
通过 API 接口 创建新团队,创建者自动成为 creator 角色成员。系统同时自动创建默认角色:admin(管理员)和 member(普通成员)。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------------- | -- | ------------------------------------------------- |
| name | 是 | 团队名称(1-100 字符) |
| description | 否 | 团队描述(最大 500 字符) |
| invite\_mode | 否 | 邀请方式:code / public / both,默认 code |
| is\_public | 否 | 是否公开:0(私有)/ 1(公开),默认 0 |
| max\_members | 否 | 最大成员数,默认 50 |
| default\_role | 否 | 新成员默认角色:admin / member,默认 member |
| nickname | 是 | 创建者在团队内的昵称(必填,见昵称规则) |
请求示例:
{
"name": "开发团队",
"description": "项目开发协作团队",
"invite_mode": "both",
"is_public": 0,
"max_members": 20,
"default_role": "member",
"nickname": "张三"
}
响应示例:
{
"code": 200,
"message": "团队创建成功",
"data": {
"team_id": 1,
"name": "开发团队",
"creator_id": 6,
"role": "creator"
}
}
后台管理接口说明:
后台管理接口(
/admin/team/createTeam)创建团队时,除了上述参数外,还需要额外传入creator_account参数来指定创建者账号(支持用户账号或手机号)。同时需要传入creator_nickname作为创建者在团队内的昵称。后台接口额外参数:
| 参数 | 必填 | 说明 |
| ----------------- | --------------------------------------- |
| creator_account | 是 | 创建者的用户账号或手机号 |
| creator_nickname | 是 | 创建者在团队内的昵称(见昵称规则) |
4.8.2 获取团队列表
GET /api/team
获取当前用户所属的所有团队。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"teams": [
{
"id": 1,
"name": "开发团队",
"description": "项目开发协作团队",
"role": "creator",
"invite_mode": "both",
"is_public": 0,
"member_count": 5,
"created_at": "2026-04-19 10:00:00"
}
]
}
}
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| ------------- | -------- | ----------- |
| id | int | 团队 ID |
| name | string | 团队名称 |
| description | string | 团队描述 |
| role | string | 当前用户在团队中的角色 |
| invite\_mode | string | 邀请方式 |
| is\_public | int | 是否公开 |
| member\_count | int | 成员数量 |
| created\_at | datetime | 创建时间 |
4.8.3 获取团队详情
GET /api/team/:id
获取指定团队的详细信息(需为团队成员)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"team": {
"id": 1,
"name": "开发团队",
"description": "项目开发协作团队",
"creator_id": 6,
"my_role": "creator",
"invite_mode": "both",
"is_public": 0,
"max_members": 20,
"default_role": "member"
},
"members": [
{
"user_id": 6,
"account": "wechat_user",
"nickname": "我",
"role": "creator",
"joined_at": "2026-04-19 10:00:00"
},
{
"user_id": 7,
"account": "user1",
"nickname": "小明",
"role": "member",
"joined_at": "2026-04-19 11:00:00"
}
],
"member_count": 2
}
}
字段说明:
-
account:微信用户显示wechat_user(脱敏),普通用户显示真实账号-
nickname:当前登录用户显示"我",其他成员显示在团队内的昵称- 移除了
permissions字段(未使用)
4.8.4 更新团队信息
PUT /api/team/:id
更新团队基本信息(仅 admin 及以上角色可操作)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数(全部可选):
| 参数 | 说明 |
|---|---|
| ------------- | ------- |
| name | 团队名称 |
| description | 团队描述 |
| invite\_mode | 邀请方式 |
| is\_public | 是否公开 |
| max\_members | 最大成员数 |
| default\_role | 新成员默认角色 |
请求示例:
{
"name": "产品研发团队",
"description": "负责产品研发工作",
"max_members": 30
}
响应示例:
{
"code": 200,
"message": "团队配置已更新"
}
4.8.5 解散团队
DELETE /api/team/:id
解散团队(仅 creator 可操作,软解散后不可恢复)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "团队已解散"
}
团队成员管理
4.8.6 生成邀请码
POST /api/team/:id/invite-code
生成或重置团队邀请码(仅 admin 以上可操作,有效期 7 天)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"invite_code": "XYZ789",
"expires_at": "2026-04-26 12:00:00"
}
}
4.8.7 加入团队
POST /api/team/join
通过邀请码加入团队(系统自动校验用户所属项目)。必须提供昵称。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------------ | -- | --- |
| invite\_code | 是 | 邀请码(支持 invite_code 或 code 两种参数名) |
| nickname | 是 | 在团队内的昵称(必填,见昵称规则) |
请求示例:
{
"invite_code": "XYZ789",
"nickname": "小明"
}
响应示例:
{
"code": 200,
"message": "加入成功"
}
可能的错误:邀请码无效或已过期、团队已解散、已是成员(自动重新激活)、成员已达上限、昵称格式不正确、昵称为保留词。
4.8.8 获取成员列表
GET /api/team/:id/members
获取团队所有正常状态成员。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"members": [
{
"user_id": 6,
"account": "wechat_user",
"nickname": "我",
"role": "creator",
"joined_at": "2026-04-19 10:00:00"
},
{
"user_id": 7,
"account": "user1",
"nickname": "小明",
"role": "member",
"joined_at": "2026-04-19 11:00:00"
}
],
"member_count": 2
}
}
字段说明:
-
account:微信用户显示wechat_user(脱敏),普通用户显示真实账号-
nickname:当前登录用户显示"我",其他成员显示在团队内的昵称
4.8.9 移除成员
DELETE /api/team/:id/member/:user_id
从团队中软移除成员(仅 admin 以上可操作,creator 不可被移除)。
路径参数:
| 参数 | 说明 |
|---|---|
| --------- | --------- |
| :id | 团队 ID |
| :user\_id | 要移除的用户 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "成员已移除"
}
4.8.10 离开团队
POST /api/team/:id/leave
当前用户主动离开团队(creator 无法离开,需先解散团队)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "已离开团队"
}
4.8.11 更新成员角色
PUT /api/team/:id/member/:user_id/role
更新团队成员的角色(仅 creator 可操作,admin 仅可修改非管理员角色)。
路径参数:
| 参数 | 说明 |
|---|---|
| --------- | ------- |
| :id | 团队 ID |
| :user\_id | 目标用户 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ---- | -- | --------------------------------- |
| role | 是 | 新角色:admin / member 或自定义角色(不能设为 creator) |
限制:操作者只能将目标成员的角色修改为 level ≥ 自己角色 level 的角色(即权限 ≤ 自己)。且不能将任何成员设置为
creator。
请求示例:
{
"role": "admin"
}
响应示例:
{
"code": 200,
"message": "角色已更新"
}
团队角色管理
角色管理接口用于定义团队中的角色及其层级和权限配置,仅限 creator 角色操作。
default_permissions 权限位说明
default_permissions 是一个 JSON 对象,包含 17 个细粒度权限位,每个值为 true(有权限)或 false(无权限):
| 权限键 | 分类 | 说明 | 适用场景 |
|---|---|---|---|
| -------- | ------ | ------ | --------- |
| 字段管理 | |||
field_create |
字段管理 | 创建自定义数据字段定义 | 管理员/组长可创建新字段 |
field_edit |
字段管理 | 编辑字段定义(名称、类型、描述等) | 修改已有字段的配置 |
field_delete |
字段管理 | 删除字段定义及其所有关联数据 | ⚠️ 危险操作,通常仅 creator |
| 分组管理 | |||
group_create |
分组管理 | 创建字段分组 | 组织字段到不同分组中 |
group_edit |
分组管理 | 编辑分组配置(名称、排序等) | 调整分组结构 |
group_delete |
分组管理 | 删除分组 | 删除空分组 |
| 数据操作 | |||
data_view_all |
数据操作 | 查看团队内所有成员的数据 | 基础只读权限 |
data_edit_own |
数据操作 | 编辑自己提交的字段数据值 | 成员修改自己的数据 |
data_edit_all |
数据操作 | 编辑任意成员的字段数据值 | 管理员代为修改他人数据 |
data_delete_own |
数据操作 | 删除自己提交的字段数据值 | 清除自己的数据 |
data_delete_all |
数据操作 | 删除任意成员的字段数据值 | 管理员清除他人数据 |
data_export |
数据操作 | 导出团队数据(CSV/Excel) | 批量导出报表 |
| 成员与角色 | |||
member_invite |
成员管理 | 通过邀请码邀请新成员加入团队 | 发放邀请链接 |
member_remove |
成员管理 | 将成员从团队中移除 | 踢出不活跃用户 |
member_role_change |
成员管理 | 修改其他成员的角色(受等级规则约束) | 晋升/降级成员角色 |
member_manage |
成员管理 | 完整的成员管理权限(邀请+移除+改角色) | 综合成员管理能力 |
| 角色管理 | |||
role_manage |
角色管理 | 创建/编辑/删除自定义角色、调整角色等级 | ⚠️ 仅 creator 可拥有 |
系统角色默认权限对照表:
| 权限 | creator (L1) | admin (L2) | member (L0) |
|---|---|---|---|
| ------ | :-----------: | :----------: | :-----------: |
| field_create/edit/delete | ✅ | ❌ | ❌ |
| group_create/edit/delete | ✅ | ❌ | ❌ |
| data_view_all | ✅ | ✅ | ✅ |
| data_edit_own | ✅ | ❌ | ✅ |
| data_edit_all | ✅ | ✅ | ❌ |
| data_delete_own | ✅ | ❌ | ❌ |
| data_delete_all | ✅ | ✅ | ❌ |
| data_export | ✅ | ✅ | ❌ |
| member_invite/remove | ✅ | ✅ | ❌ |
| member_role_change/manage | ✅ | ✅ | ❌ |
| role_manage | ✅ | ❌ | ❌ |
admin 权限说明:管理员拥有基础的数据查看、成员管理和数据操作权限,但无字段管理权限(不能创建/编辑/删除自定义字段和分组),也无角色管理权限。
请求示例(创建带完整权限的自定义角色):
POST /api/team/:id/roles
{
"role_key": "dev_lead",
"display_name": "开发组长",
"level": 6,
"default_permissions": {
"field_create": false,
"field_edit": false,
"field_delete": false,
"group_create": true,
"group_edit": true,
"group_delete": true,
"data_view_all": true,
"data_edit_own": true,
"data_edit_all": true,
"data_delete_own": true,
"data_delete_all": false,
"data_export": true,
"member_invite": true,
"member_remove": true,
"member_role_change": false,
"member_manage": true,
"role_manage": false
}
}
4.8.12 获取角色列表
GET /api/team/:id/roles
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "Success",
"data": {
"roles": [
{
"role_key": "creator",
"display_name": "创建者",
"color": "#F56C6C",
"level": 1,
"is_system": 1,
"editable": false
},
{
"id": 1,
"role_key": "admin",
"display_name": "管理员",
"level": 2,
"is_system": 1,
"editable": true
},
{
"id": 2,
"role_key": "member",
"display_name": "成员",
"level": 0,
"is_system": 1,
"editable": true
},
{
"id": 5,
"role_key": "dev_lead",
"display_name": "开发组长",
"level": 6,
"is_system": 0,
"editable": true
}
]
}
}
字段说明:
-
creator角色:default_permissions为null,editable为false(不可编辑)- 其他角色:
editable为true,可编辑配置- 角色按
level从小到大排序
4.8.13 创建角色
POST /api/team/:id/roles
创建自定义角色。仅限 creator 操作,自定义角色等级必须 ≥ 5。
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------------------- | -- | ----------------------------------------- |
| role\_key | 是 | 角色标识(英文,如 dev_lead),不可使用系统保留名 |
| display\_name | 是 | 显示名称(如"开发组长") |
| level | 否 | 角色等级,默认 5,必须 ≥ 5(越小权限越大)。**不可与已有角色等级重复** |
| description | 否 | 角色描述 |
| color | 否 | 标签颜色(十六进制),默认 #409EFF |
| default\_permissions | 否 | 权限配置对象(见权限列表),不传则使用空权限 |
注意:角色按
level从小到大排序,不再支持手动排序(sort_order已移除)。
请求示例:
{
"role_key": "dev_lead",
"display_name": "开发组长",
"level": 6,
"description": "负责管理开发团队",
"color": "#67C23A",
"default_permissions": {
"data_view_all": true,
"data_edit_own": true,
"data_edit_all": true,
"data_export": true
}
}
响应示例:
{
"code": 200,
"message": "Role created",
"data": {
"role_id": 5,
"role_key": "dev_lead"
}
}
4.8.14 更新角色
PUT /api/team/:id/roles/:role_id
更新角色配置。仅限 creator 操作。 role_id 可使用角色数字 ID 或 role_key。
creator角色的所有配置不可修改(返回错误)- 系统角色(
is_system=1,如 admin、member)的level可以修改 - 自定义角色的
level必须 ≥ 5 - 角色的
level必须唯一,不能与已有角色重复
请求参数(全部可选,传什么改什么):
| 参数 | 说明 |
|---|---|
| ------------------- | ----------------------------------------- |
| display\_name | 显示名称 |
| level | 角色等级(必须唯一),系统角色也可修改 |
| description | 角色描述 |
| color | 标签颜色 |
| status | 1 启用 / 0 禁用 |
| default\_permissions | 权限配置对象 |
注意:
sort_order已移除,角色按level自动排序。
请求示例:
{
"display_name": "开发负责人",
"level": 7
}
响应示例:
{
"code": 200,
"message": "Role updated",
"data": {
"role_id": 5
}
}
4.8.15 删除角色
DELETE /api/team/:id/roles/:role_id
删除自定义角色。仅限 creator 操作。
- 系统角色(
creator等)不可删除 - 如果有成员正在使用该角色,无法删除
响应示例:
{
"code": 200,
"message": "Role deleted"
}
团队字段管理
4.8.16 获取字段列表
GET /api/team/:id/fields
获取团队所有自定义字段定义。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"fields": [
{
"id": 1,
"team_id": 1,
"group_id": null,
"field_name": "team_name",
"field_type": "varchar",
"field_length": 100,
"description": "团队名称",
"sort_order": 1,
"require_auth": 0,
"is_required": 0,
"default_value": null,
"merge_with_default": 0,
"is_readonly": 0,
"is_encrypted": 0,
"is_decrypt": 1,
"placeholder": "请输入团队名称",
"options": null,
"created_at": "2026-04-19 10:00:00"
}
]
}
}
4.8.17 创建字段
POST /api/team/:id/fields
创建新的团队自定义字段(仅 admin 以上可操作)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| -------------------- | -- | ------------------- |
| field\_name | 是 | 字段名称(唯一标识,1-100 字符) |
| field\_type | 是 | 字段类型,默认 varchar |
| field\_length | 否 | 字段长度,默认 255 |
| group\_id | 否 | 所属分组 ID |
| description | 否 | 字段描述 |
| sort\_order | 否 | 排序值,默认 0 |
| require\_auth | 否 | 是否需要登录,默认 0 |
| options | 否 | 选项配置(JSON) |
| is\_required | 否 | 是否必填,默认 0 |
| default\_value | 否 | 默认值 |
| merge\_with\_default | 否 | JSON 字段是否合并默认值,默认 0 |
| is\_readonly | 否 | 是否只读,默认 0 |
| is\_encrypted | 否 | API 返回时是否加密,默认 0 |
| is\_decrypt | 否 | API 接收时是否解密,默认 1 |
| placeholder | 否 | 占位提示文本 |
请求示例:
{
"field_name": "team_name",
"field_type": "varchar",
"field_length": 100,
"description": "团队名称",
"sort_order": 1,
"require_auth": 0,
"is_required": 1,
"placeholder": "请输入团队名称"
}
响应示例:
{
"code": 200,
"message": "字段创建成功",
"data": {
"field_id": 1
}
}
4.8.18 更新字段
PUT /api/team/:id/fields/:field_id
更新字段定义(仅 admin 以上可操作,field_name 不可修改)。
路径参数:
| 参数 | 说明 |
|---|---|
| ---------- | ----- |
| :id | 团队 ID |
| :field\_id | 字段 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:同创建字段,除 field_name 外均可更新。
响应示例:
{
"code": 200,
"message": "字段已更新"
}
4.8.19 删除字段
DELETE /api/team/:id/fields/:field_id
删除字段定义,同时删除该字段的所有数据。
路径参数:
| 参数 | 说明 |
|---|---|
| ---------- | ----- |
| :id | 团队 ID |
| :field\_id | 字段 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "字段已删除"
}
团队字段分组
4.8.20 获取分组列表
GET /api/team/:id/groups
获取团队所有字段分组。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"groups": [
{
"id": 1,
"team_id": 1,
"name": "基础信息",
"key": "basic_info",
"description": "团队基础信息",
"sort_order": 1,
"created_at": "2026-04-19 10:00:00"
}
]
}
}
4.8.21 创建分组
POST /api/team/:id/groups
创建字段分组(仅 admin 以上可操作)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ----------- | -- | ------------- |
| name | 是 | 分组名称(1-50 字符) |
| key | 是 | 分组标识(团队内唯一) |
| description | 否 | 分组描述 |
| sort\_order | 否 | 排序值,默认 0 |
响应示例:
{
"code": 200,
"message": "分组创建成功",
"data": {
"group_id": 1
}
}
4.8.22 更新分组
PUT /api/team/:id/groups/:group_id
更新分组信息(仅 admin 以上可操作)。
路径参数:
| 参数 | 说明 |
|---|---|
| ---------- | ----- |
| :id | 团队 ID |
| :group\_id | 分组 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:同创建分组,全部可选。
响应示例:
{
"code": 200,
"message": "分组已更新"
}
4.8.23 删除分组
DELETE /api/team/:id/groups/:group_id
删除分组(字段不会被删除,group_id 置为 null)。
路径参数:
| 参数 | 说明 |
|---|---|
| ---------- | ----- |
| :id | 团队 ID |
| :group\_id | 分组 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"message": "分组已删除"
}
团队字段数据
4.8.24 获取字段数据
GET /api/team/:id/field-values
获取团队所有自定义字段的值。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
响应示例:
{
"code": 200,
"data": {
"values": {
"team_name": "我的开发团队",
"team_description": "这是一个示例团队"
}
}
}
4.8.25 更新字段数据
PUT /api/team/:id/field-values
批量更新团队字段数据(仅 admin 以上可操作)。
路径参数:
| 参数 | 说明 |
|---|---|
| --- | ----- |
| :id | 团队 ID |
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------ | -- | ------------------- |
| fields | 是 | 字段数据对象(键=字段名,值=字段值) |
请求示例:
{
"fields": {
"team_name": "新的团队名称",
"team_description": "更新后的描述"
}
}
响应示例:
{
"code": 200,
"message": "字段值更新成功",
"data": {
"updated_count": 2
}
}
4.9 系统接口
4.9.1 连通性测试
GET /api/ping
测试 API 服务是否正常运行。不需要 API Key,可在任何阶段调用。
响应示例:
{
"code": 200,
"message": "pong",
"timestamp": 1773592665,
"trace_id": "c87f8ab97f17598ba58c023168a10105",
"data": {
"time": 1773592665
}
}
5. 错误码参考
5.1 HTTP 状态码
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| --- | ------- | ----------------------- |
| 200 | 成功 | 正常响应 |
| 400 | 参数错误 | 缺少必填参数、参数格式不正确 |
| 401 | 未授权 | API Key 无效或缺失 |
| 403 | 禁止访问 | 项目已禁用、游客请求需登录字段、IP 来源受限 |
| 404 | 未找到 | 资源不存在(字段、分享码、用户等) |
| 429 | 请求过于频繁 | 触发频率限制,需等待后重试 |
| 500 | 服务器内部错误 | 系统异常 |
5.2 通用错误响应格式
{
"code": 401,
"message": "Invalid API Key or project not found"
}
5.3 常见业务错误
| 场景 | code | message 示例 |
|---|---|---|
| ---------- | ---- | ---------------------------------------- |
| API Key 无效 | 401 | Invalid API Key or project not found |
| 项目已禁用 | 403 | project is disabled |
| Token 过期 | 401 | token_expired |
| IP 不匹配 | 401 | ip_mismatch |
| 微信登录失败 | 401 | 具体微信接口返回的错误信息 |
| 账号已存在 | 400 | Account already exists |
| 密码错误 | 401 | Invalid password |
| 用户已禁用 | 403 | user status异常 |
| 字段不存在 | 400 | The following fields do not exist: ... |
| 游客模式未开启 | 403 | Guest mode is not enabled |
| 邮箱验证失败 | 400 | Invalid verification token |
| 团队不存在或已解散 | 404 | 团队相关错误 |
| 无操作权限 | 403 | 权限不足 |
| 邀请码无效 | 400 | 邀请码相关错误 |
| 跨项目加入 | 403 | 项目归属校验失败 |
实际错误信息以服务端返回为准,上表为典型示例。
6. 使用场景示例
6.1 微信小程序登录
async function login() {
const token = wx.getStorageSync('token');
// 1. 尝试 Token 登录(即使过期也能续期)
if (token) {
try {
const res = await tokenLogin(token);
if (res.code === 200) {
wx.setStorageSync('token', res.data.token);
return res.data;
}
} catch (e) {
console.log('Token 登录失败,回退到微信授权');
}
}
// 2. Token 不可用,执行微信授权登录
return wechatAuthLogin();
}
async function tokenLogin(token) {
return request('POST', '/api/auth/wechat', {}, {
'X-User-Token': token
});
}
async function wechatAuthLogin() {
return new Promise((resolve, reject) => {
wx.login({
success: async (loginRes) => {
const res = await request('POST', '/api/auth/wechat', {
code: loginRes.code
});
if (res.code === 200) {
wx.setStorageSync('token', res.data.token);
}
resolve(res);
},
fail: reject
});
});
}
// 通用请求封装
function request(method, path, data = {}, extraHeaders = {}) {
return new Promise((resolve, reject) => {
wx.request({
url: 'https://api.example.com' + path,
method: method,
header: {
'X-API-Key': 'your_api_key',
'Content-Type': 'application/json',
...extraHeaders
},
data: data,
success: (res) => resolve(res.data),
fail: reject
});
});
}
6.2 完整注册登录流程
// 1. 注册
const regRes = await request('POST', '/api/auth/register', {
account: 'newuser',
password: 'MyPass123',
email: 'user@example.com'
});
// regRes.data.token → 保存 Token
// 2. 后续登录
const loginRes = await request('POST', '/api/auth/login', {
account: 'newuser',
password: 'MyPass123',
include_user_info: true,
include_user_data: true
});
// 3. 读写用户数据
const userData = await request('GET', '/api/user/field-values', {}, {
'X-User-Token': loginRes.data.token
});
await request('PUT', '/api/user/field-values', {
nickname: '小明',
age: 25
}, {
'X-User-Token': loginRes.data.token
});
// 4. 心跳保活(建议每 3 分钟调用一次)
setInterval(async () => {
await request('GET', '/api/auth/heartbeat', {}, {
'X-User-Token': loginRes.data.token
});
}, 180000);
6.3 游客模式使用
// 1. 领取游客 Token
const guestRes = await request('POST', '/api/auth/login', {});
const guestToken = guestRes.data.token; // guest_xxxx...
// 2. 获取公开的项目数据
const data = await request('GET', '/api/user/field-values', {
group: 'public_info'
}, {
'X-User-Token': guestToken
});
// 3. 游客尝试访问需登录字段 → 403
const restricted = await request('GET', '/api/user/field-values', {
fields: 'phone,email'
}, {
'X-User-Token': guestToken
});
// → { code: 403, message: "The following fields require authentication..." }
附录:接口速查表
| 方法 | 路径 | 说明 | 需 Token |
|---|---|---|---|
| ------ | ------------------------------------ | ------------- | ------- |
| POST | /api/auth/register |
用户注册 | 否 |
| POST | /api/auth/login |
登录 / 游客 Token | 否 |
| POST | /api/auth/wechat |
微信登录 | 否(Code) |
| POST | /api/auth/logout |
退出登录 | 是 |
| GET | /api/auth/heartbeat |
心跳检测 | 是 |
| POST | /api/auth/forgot-password |
忘记密码 | 否 |
| POST | /api/auth/reset-password |
重置密码 | 否 |
| POST | /api/auth/change-password |
修改密码 | 是 |
| POST | /api/auth/send-verify-email |
发送验证邮件 | 是 |
| GET | /api/auth/verify-email |
验证邮箱 | 否 |
| GET | /api/user/info |
获取用户信息 | 是 |
| GET | /api/user/field-values |
获取用户数据 | 是/游客 |
| PUT | /api/user/field-values |
全量更新数据 | 是 |
| PATCH | /api/user/field-values |
部分更新数据 | 是 |
| DELETE | /api/user/field-values |
删除字段数据 | 是 |
| GET | /api/project |
获取项目信息 | 否 |
| GET | /api/project/data |
获取项目字段数据 | 否/可选 |
| GET | /api/project/fields |
获取字段定义 | 否 |
| POST | /api/share/generate |
生成分享码 | 是 |
| GET | /api/share/use |
使用分享码 | 否 |
| GET | /api/share/list |
分享列表 | 是 |
| DELETE | /api/share/:id |
撤销分享 | 是 |
| POST | /api/guest/token |
获取游客 Token | 否 |
| GET | /api/guest/token/verify |
验证游客 Token | 否 |
| GET | /api/guest/token/cleanup |
清理过期游客 Token | 否 |
| POST | /api/team |
创建团队 | 是 |
| GET | /api/team |
团队列表 | 是 |
| GET | /api/team/:id |
团队详情 | 是 |
| PUT | /api/team/:id |
更新团队 | 是 |
| DELETE | /api/team/:id |
解散团队 | 是 |
| POST | /api/team/:id/invite-code |
生成邀请码 | 是 |
| POST | /api/team/join |
加入团队 | 是 |
| GET | /api/team/:id/members |
成员列表 | 是 |
| DELETE | /api/team/:id/member/:user_id |
移除成员 | 是 |
| POST | /api/team/:id/leave |
离开团队 | 是 |
| PUT | /api/team/:id/member/:user_id/role |
更新角色 | 是 |
| GET | /api/team/:id/fields |
团队字段列表 | 是 |
| POST | /api/team/:id/fields |
创建字段 | 是 |
| PUT | /api/team/:id/fields/:field_id |
更新字段 | 是 |
| DELETE | /api/team/:id/fields/:field_id |
删除字段 | 是 |
| GET | /api/team/:id/groups |
分组列表 | 是 |
| POST | /api/team/:id/groups |
创建分组 | 是 |
| PUT | /api/team/:id/groups/:group_id |
更新分组 | 是 |
| DELETE | /api/team/:id/groups/:group_id |
删除分组 | 是 |
| GET | /api/team/:id/field-values |
获取字段数据 | 是 |
| PUT | /api/team/:id/field-values |
更新字段数据 | 是 |
| GET | /api/ping |
连通性测试 | 否 |