用户数据管理 API 服务 - 开发文档
一套为小程序、APP、Web 应用提供用户管理、数据存储、团队协作等能力的完整 API 服务。
1. 项目概述
- 用户认证:账号密码注册登录、微信小程序一键登录、游客模式
- 数据存储:自定义用户数据字段,支持分组、加密、按需返回
- 团队协作:创建团队、成员管理、自定义字段、权限控制
- 数据分享:生成分享码,安全分享用户数据
- 访问控制:IP 限制、频率限制、登录限制、邮箱验证
2. 快速开始
- 获取 API Key:登录管理后台 → "项目管理" → 创建/编辑项目 → 复制 API Key
- 测试连通性:
GET /api/ping HTTP/1.1
Host: your-domain.com
{
"code": 200,
"message": "pong",
"timestamp": 1773842113,
"trace_id": "abc123...",
"data": {
"time": 1773842113
}
}
- 接入流程:后台"项目字段管理"配置字段 →
/api/auth/register或/api/auth/login注册登录 →GET/PUT /api/user/field-values读写用户数据 →/api/auth/heartbeat心跳保活
3. 核心概念
3.1 认证
所有业务接口需在 Header 携带 API Key(识别项目),需用户身份的接口额外携带 User Token(通过登录接口获取,guest_ 前缀为游客):
X-API-Key: your_project_api_key
X-User-Token: user_token_here // 可选
- 游客模式:通过
/api/auth/login(不带账号密码)或/api/guest/token领取临时 Token,仅可访问require_auth = 0的公开字段;显式请求需登录字段返回403,按分组请求静默过滤 - Token 有效期:
-1永不过期,否则为过期时间戳;微信 Token 登录始终刷新,账号密码/微信 Code 是否刷新取决于项目配置 - 用户类型:普通用户(账号密码注册登录,支持忘记密码、邮箱验证);微信用户(须用
/api/auth/wechat授权,无密码、不支持忘记密码、account返回wechat_user)
3.2 字段与分组
| 类型 | 说明 | 示例场景 |
|---|---|---|
| -------- | ------- | --------- |
| varchar | 短文本 | 昵称、邮箱、手机号 |
| text | 长文本 | 简介、描述 |
| int / float | 整数 / 浮点数 | 年龄 / 分数 |
| date / datetime | 日期 / 时间 | 生日 / 注册时间 |
| boolean | 布尔值 | 开关状态 |
| json | JSON 对象 | 复杂配置 |
字段可归入分组,通过 group 参数批量获取,结合 require_auth 控制组内字段的访问权限。
3.3 统一响应格式
所有接口遵循统一响应结构:
{
"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字段,省略与之一致的外层字段。
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.10 定时任务接口 | 5 | 定时任务 CRUD |
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 | 否 | 是否返回用户基本信息 |
| user_data_fields | 否 | 指定返回的用户数据字段(逗号分隔);传 all 表示返回全部字段 |
| user_data_group | 否 | 按分组返回用户数据字段(逗号分隔) |
| field_key_start | 否 | JSON字段的起始键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-01)和字符串(如b) |
| field_key_end | 否 | JSON字段的结束键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-31)和字符串(如d) |
| field_key_field | 否 | 指定要进行键范围查询的字段名(可选,逗号分隔支持多个字段)。不传则对所有JSON字段生效,传值则仅对指定字段生效 |
| field_key_sort | 否 | JSON字段键排序:asc(升序)/ desc(降序),默认按存储顺序。日期键传 desc 即按时间倒序分页 |
| field_key_page | 否 | JSON字段分页页码(从1开始),配合field_key_page_size使用 |
| field_key_page_size | 否 | JSON字段每页条数,与field_key_page配合实现分页查询 |
重要说明:
user_data通过user_data_fields/user_data_group指定返回字段;传user_data_fields=all返回全部字段。不指定这两个参数时不返回user_data。
请求示例(用户登录):
{
"account": "user123",
"password": "password123",
"include_user_info": true,
"user_data_fields": "all"
}
请求示例(用户登录 + JSON字段范围查询):
// 场景1:只对 schedule 字段过滤
{
"user_data_group": "user,site",
"field_key_field": "schedule",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31"
}
// 场景2:对所有 JSON 字段都过滤(不传 field_key_field)
{
"user_data_fields": "schedule,tags",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31"
}
// 场景3:使用字符串键范围
{
"user_data_fields": "tags",
"field_key_field": "tags",
"field_key_start": "b",
"field_key_end": "d"
}
// 场景4:JSON字段分页查询(获取5月份排班数据,每页10条)
{
"user_data_fields": "schedule",
"field_key_field": "schedule",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31",
"field_key_page": 1,
"field_key_page_size": 10
}
// 场景5:多个JSON字段进行范围查询
{
"user_data_fields": "schedule,tags",
"field_key_field": "schedule,tags",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31"
}
请求示例(游客 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": {
"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"
}
}
}
响应示例(游客 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 | 否 | 是否返回用户基本信息 |
| user_data_fields | 否 | 指定返回的用户数据字段(逗号分隔);传 all 表示返回全部字段 |
| user_data_group | 否 | 按分组返回用户数据字段(逗号分隔) |
| field_key_start | 否 | JSON字段的起始键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-01)和字符串(如b) |
| field_key_end | 否 | JSON字段的结束键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-31)和字符串(如d) |
| field_key_sort | 否 | JSON字段键排序:asc(升序)/ desc(降序),默认按存储顺序。日期键传 desc 即按时间倒序分页 |
重要说明:
user_data通过user_data_fields/user_data_group指定返回字段;传user_data_fields=all返回全部字段。不指定这两个参数时不返回user_data。
登录模式:
| 模式 | 适用场景 |
|---|---|
| -------- | ------------------- |
| Token 登录 | 已知 Token(即使已过期也可续期) |
| Code 登录 | 新用户注册或 Token 不可用 |
请求示例(用户登录 + JSON字段范围查询):
// 场景1:只对 schedule 字段过滤
{
"user_data_group": "user,site",
"field_key_field": "schedule",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31"
}
// 场景2:对所有 JSON 字段都过滤(不传 field_key_field)
{
"user_data_fields": "schedule,tags",
"field_key_start": "2025-05-01",
"field_key_end": "2025-05-31"
}
// 场景3:使用字符串键范围
{
"user_data_fields": "tags",
"field_key_field": "tags",
"field_key_start": "b",
"field_key_end": "d"
}
响应示例:
{
"code": 200,
"message": "WeChat authentication successful",
"data": {
"user_id": 1,
"account": "wechat_xxx",
"email": "user@example.com",
"token": "token_here...",
"expires_at": -1,
"has_password": false,
"token_type": "standard",
"is_new_user": false,
"user_info": {
"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"
}
}
}
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
通过邮件中的验证链接完成邮箱验证。此接口不需要 API Key,Token 可通过 URL 参数或 X-User-Token 请求头传递。
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ----------- | -- | ------ |
| token | 是 | 邮箱验证令牌 |
| project_id | 是 | 项目 ID |
请求示例:
GET /api/auth/verify-email?token=xxx&project_id=1
或
GET /api/auth/verify-email?project_id=1
X-User-Token: xxx
响应示例:
{
"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 | 否 | 指定获取的字段名(逗号分隔);传 all 表示返回全部字段 |
| group | 否 | 按分组获取字段(逗号分隔的分组 key) |
| field_key_start | 否 | JSON字段的起始键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-01)和字符串(如b) |
| field_key_end | 否 | JSON字段的结束键,用于范围查询(仅对JSON类型字段生效)。支持日期格式(如2025-05-31)和字符串(如d) |
| field_key_field | 否 | 指定要进行键范围查询的字段名(可选)。不传则对所有JSON字段生效,传值则仅对指定字段生效 |
| field_key_sort | 否 | JSON字段键排序:asc(升序)/ desc(降序),默认按存储顺序。日期键传 desc 即按时间倒序分页 |
| field_key_page | 否 | JSON字段分页页码(从1开始),配合field_key_page_size使用 |
| field_key_page_size | 否 | JSON字段每页条数,与field_key_page配合实现分页查询 |
重要说明:
- 本接口只支持
fields/group参数筛选字段,不支持user_data_fields/user_data_group等参数(这些参数用于POST /api/auth/login、POST /api/auth/wechat登录接口)。- 不传
fields/group时不返回任何用户数据(data为空对象),防止全量数据泄露。需要全量数据必须显式传fields=all。
请求示例(返回全部字段):
GET /api/user/field-values?fields=all
响应示例(用户):
{
"code": 200,
"message": "Success",
"data": {
"user_id": 1,
"account": "user123",
"email": "user@example.com",
"data": {
"nickname": "张三",
"avatar": "https://example.com/avatar.jpg",
"phone": "13800138000"
}
}
}
未指定字段时返回空数据:
GET /api/user/field-values
{
"code": 200,
"message": "ok",
"data": {
"user_id": 1,
"account": "user123",
"email": "user@example.com",
"data": {}
}
}
请求示例(游客,返回全部公开字段):
GET /api/user/field-values?fields=all
响应示例(游客):
{
"code": 200,
"message": "Success",
"data": {
"guest": true,
"data": {
"site_title": "我的项目",
"announcement": "欢迎访问!"
},
"request_count": 2,
"max_requests": 100
}
}
JSON字段键范围查询示例:
假设用户有一个 schedule 字段,存储了如下JSON数据:
{
"2025-05-01": "1",
"2025-05-02": "1",
"2025-05-03": "5",
"2025-05-04": "5",
"2025-05-05": "3"
}
查询指定日期范围的数据:
GET /api/user/field-values?fields=schedule&field_key_start=2025-05-02&field_key_end=2025-05-04
响应结果:
{
"code": 200,
"data": {
"schedule": {
"2025-05-02": "1",
"2025-05-03": "5",
"2025-05-04": "5"
}
}
}
查询字符串键范围:
GET /api/user/field-values?fields=tags&field_key_start=b&field_key_end=d
指定字段进行范围查询(当获取多个字段时,仅对指定字段过滤):
GET /api/user/field-values?fields=schedule,user_setting&field_key_field=schedule&field_key_start=2025-05-01&field_key_end=2025-05-31
此请求会返回:
schedule字段:仅包含5月份的数据(范围过滤后)user_setting字段:完整数据(不受范围过滤影响)
JSON字段分页查询:
GET /api/user/field-values?fields=schedule&field_key_field=schedule&field_key_start=2025-05-01&field_key_end=2025-05-31&field_key_page=1&field_key_page_size=10
分页响应示例:
{
"code": 200,
"data": {
"schedule": {
"data": {
"2025-05-01": {"shift": "morning"},
"2025-05-02": {"shift": "afternoon"},
"2025-05-03": {"shift": "morning"}
},
"pagination": {
"page": 1,
"page_size": 10,
"total": 31,
"total_pages": 4
}
}
}
}
场景说明:
| 场景 | 请求方式 | 参数组合 |
|---|---|---|
| ------ | --------- | --------- |
| 不传任何字段参数(返回空数据) | GET | 不传 fields / group |
| 获取全部用户数据(需显式指定) | GET | fields=all |
| 获取指定字段 | GET | fields=nickname,phone |
| 按分组获取字段 | GET | group=user,site |
| 获取指定日期范围的排班数据 | GET/PUT | fields=schedule&field_key_start=2025-05-01&field_key_end=2025-05-31 |
| 获取多个字段但只过滤指定字段 | GET/PUT | fields=schedule,user_setting&field_key_field=schedule&field_key_start=2025-05-01&field_key_end=2025-05-31 |
| 获取字符串键范围数据 | GET/PUT | fields=tags&field_key_field=tags&field_key_start=b&field_key_end=d |
| JSON字段分页查询 | GET | fields=schedule&field_key_field=schedule&field_key_page=2&field_key_page_size=20 |
| JSON字段按时间倒序分页 | GET | fields=schedule&field_key_field=schedule&field_key_sort=desc&field_key_page=1&field_key_page_size=20 |
游客访问控制规则:
| 请求方式 | 需登录字段处理 | 说明 |
|---|---|---|
| ------------------ | ----------- | ----------- |
通过 fields 参数显式指定 |
返回 403 错误 |
提示哪些字段需要登录 |
通过 group 参数按分组 |
静默过滤 | 仅返回公开字段,不报错 |
传 fields=all 获取全部 |
静默过滤 | 仅返回公开字段 |
不指定 fields/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
部分更新用户字段数据。仅更新提供的字段,未提供的字段保持不变。
对于 json 类型字段,PATCH 会合并 JSON 对象,而不是覆盖。例如字段 user_remark_data 已有 {"2026-07-15":"15"},再 PATCH {"user_remark_data":{"2026-07-16":"16"}},最终值为 {"2026-07-15":"15","2026-07-16":"16"}。
请求 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
删除用户指定的某个字段数据。支持以下两种传参方式:
- 请求体中传
field_name - 路径参数:
DELETE /api/user/field-values/{field_name}
请求 Header:
X-API-Key: your_api_key
X-User-Token: user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ----------- | -- | ------- |
| field_name | 是 | 要删除的字段名 |
请求示例:
{
"field_name": "custom_field1"
}
或
DELETE /api/user/field-values/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/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": "Guest token created successfully",
"data": {
"token": "guest_xxxxxx...",
"expires_at": "2026-05-02 19:10:41",
"max_requests": 100
}
}
与
/api/auth/login空请求领取的游客 Token 格式一致。
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": {
"token": "guest_xxxxxx...",
"project_id": 1,
"expires_at": "2026-05-02 19:10:41",
"request_count": 5,
"max_requests": 100
}
}
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 团队接口说明
认证要求
所有团队接口均需携带 X-API-Key 和 X-User-Token。
角色与权限
系统使用等级制管理角色,等级数字越小权限越大。成员只能管理等级严格低于自己的成员,不能管理同级或上级。
| 角色 | 等级 | 权限 |
|---|---|---|
| ------- | -- | ---------------------------------------------------------- |
| creator | 1 | 创建者,拥有全部权限,唯一可管理角色定义的角色 |
| admin | 2 | 管理员,可管理普通成员和自定义角色成员 |
| member | 0 | 普通成员,可查看和编辑数据 |
| 自定义角色 | 5+ | 由创建者自定义,可配置独立权限 |
昵称规则
- 允许 2-6 个中文或 2-12 个英文字符
- 禁止数字、符号、空格、保留词(如"我")
- API 返回时当前登录用户的昵称会显示为"我",但数据库中不得存储"我"
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 或 DELETE /api/team/:id/members/: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 或 PUT /api/team/:id/members/: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 配置权限,常见权限包括:
| 权限分类 | 权限键 | 说明 |
|---|---|---|
| --------- | -------- | ------ |
| 字段管理 | field_create / field_edit / field_delete |
创建/编辑/删除字段定义 |
| 分组管理 | group_create / group_edit / group_delete |
创建/编辑/删除分组 |
| 数据操作 | data_view_all / data_edit_own / data_edit_all |
查看/编辑数据 |
| 成员管理 | member_invite / member_remove / member_role_change |
邀请/移除/修改角色 |
| 角色管理 | role_manage |
创建/编辑/删除自定义角色 |
role_manage仅限creator拥有。
请求示例(创建带完整权限的自定义角色):
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 字符,保留字段 id/user_id/project_id/created_at/updated_at/all 不可用) |
| 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
}
}
4.10 定时任务接口
定时任务 CRUD,由开发者通过 API 管理定时推送任务。鉴权方式与其它用户接口一致(X-API-Key + X-User-Token)。
任务 ID(
task_id)由开发者自定义,非后端自动生成。
4.10.1 创建定时任务
POST /api/scheduled-task
请求 Header:
X-API-Key: your_api_key
X-User-Token: your_user_token
Content-Type: application/json
请求参数:
| 参数 | 必填 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| task_id | 是 | 开发者自定义任务ID(唯一) |
| name | 是 | 任务名称 |
| type | 否 | 任务类型,默认 wechat_subscribe |
| config | 是 | 任务配置 JSON |
| execute_time | 是 | 计划执行时间,格式 Y-m-d H:i:s |
type=wechat_subscribe 时的 config 结构:
{
"template_id": "微信模板ID",
"user_ids": ["用户openid1", "用户openid2"],
"template_data": {
"thing5": {"value": "内容1"},
"thing2": {"value": "内容2"}
}
}
注意:
-
user_ids为必填,指定接收消息的用户ID列表。为空时任务将直接失败,不会推送给所有用户。-
thing类型字段(如thing5、thing2)的值最多 20 个字符(中文算 1 个),超出部分将被自动截断。其他类型(如date4、number2)无此限制。-
template_data中的字段名(如thing5、date4)必须与微信小程序订阅消息模板中的字段名完全一致。
请求示例:
{
"task_id": "birthday_reminder_001",
"name": "生日提醒推送",
"type": "wechat_subscribe",
"config": {
"template_id": "r933m2iL4NB7IU8tydTI1FWTNE7gDo6vADrG1F2MQ7s",
"user_ids": ["oXz8w5J..."],
"template_data": {
"thing5": {"value": "张三的生日"},
"thing2": {"value": "今天是张三的生日!"}
}
},
"execute_time": "2026-07-10 09:00:00"
}
响应示例:
{
"code": 200,
"message": "创建成功",
"data": {
"task_id": "birthday_reminder_001"
}
}
4.10.2 获取任务列表
GET /api/scheduled-task
请求 Header:
X-API-Key: your_api_key
X-User-Token: your_user_token
响应示例:
{
"code": 200,
"message": "success",
"data": [
{
"task_id": "birthday_reminder_001",
"type": "wechat_subscribe",
"name": "生日提醒推送",
"config": {
"template_id": "r933m2iL4NB7IU8tydTI1FWTNE7gDo6vADrG1F2MQ7s",
"template_data": {}
},
"execute_time": "2026-07-10 09:00:00",
"status": 0,
"result": null,
"executed_at": null,
"created_at": "2026-07-03 12:00:00",
"updated_at": "2026-07-03 12:00:00"
}
]
}
状态说明:
| status | 说明 |
|---|---|
| -------- | ------ |
| 0 | 待执行 |
| 1 | 已执行 |
| 2 | 执行失败 |
| 3 | 已取消 |
4.10.3 获取单个任务
GET /api/scheduled-task/:task_id
请求 Header:
X-API-Key: your_api_key
X-User-Token: your_user_token
响应示例:
{
"code": 200,
"message": "success",
"data": {
"task_id": "birthday_reminder_001",
"type": "wechat_subscribe",
"name": "生日提醒推送",
"config": {},
"execute_time": "2026-07-10 09:00:00",
"status": 0,
"result": null,
"executed_at": null,
"created_at": "2026-07-03 12:00:00",
"updated_at": "2026-07-03 12:00:00"
}
}
4.10.4 修改定时任务
PUT /api/scheduled-task/:task_id
仅
status=0(待执行)的任务可以修改。
请求 Header:
X-API-Key: your_api_key
X-User-Token: your_user_token
Content-Type: application/json
请求示例:
{
"name": "生日提醒推送(已更新)",
"execute_time": "2026-07-11 09:00:00"
}
响应示例:
{
"code": 200,
"message": "修改成功",
"data": null
}
4.10.5 删除定时任务
DELETE /api/scheduled-task/:task_id
请求 Header:
X-API-Key: your_api_key
X-User-Token: your_user_token
响应示例:
{
"code": 200,
"message": "删除成功",
"data": null
}
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
});
// 3. 读写用户数据(需显式指定字段,fields=all 返回全部字段)
const userData = await request('GET', '/api/user/field-values?fields=all', {}, {
'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/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 |
连通性测试 | 否 |
| -------- | -------------------------------------- | ------------------- | -------- |
| 定时任务 | |||
| POST | /api/scheduled-task |
创建定时任务 | 是 |
| GET | /api/scheduled-task |
获取任务列表 | 是 |
| GET | /api/scheduled-task/:task_id |
获取单个任务 | 是 |
| PUT | /api/scheduled-task/:task_id |
修改定时任务 | 是 |
| DELETE | /api/scheduled-task/:task_id |
删除定时任务 | 是 |
| -------- | -------------------------------------- | ------------------- | -------- |
| 定时任务自动推送 | |||
any |
/api/scheduled-task/push |
自动推送入口(定时触发) | 否(Token验证) |