MobyformMobyform文档
MobyformMobyform文档
首页

快速开始

快速开始创建表单表单编辑器

表单配置

字段类型条件逻辑表单设置主题定制

发布与数据

发布与分享数据管理

功能模块

考试测评模板团队协作订单表单集成

高级功能

高级功能
维度评价抽奖GDPR 控制API 接口自定义域名AI 路线图

实用指南

实用指南

常见问题

常见问题
高级功能

API 接口

使用开发者 API 和 Webhook 实现自定义集成。

API 接口

Mobyform 提供 RESTful API,让开发者通过编程方式管理表单、读取数据和实现自定义集成。

需要 Pro 及以上套餐

认证

API 密钥

  1. 进入 「设置」 → 「开发者」
  2. 点击 「生成 API 密钥」
  3. 复制并妥善保管密钥

使用方式

在请求头中携带 API 密钥:

Authorization: Bearer YOUR_API_KEY

密钥管理

  • 创建多个 API 密钥
  • 为密钥设置权限范围
  • 随时撤销密钥
  • 查看密钥使用情况

主要 API

表单管理

接口方法说明
/api/formsGET获取表单列表
/api/forms/:keyGET获取表单详情
/api/formsPOST创建表单
/api/forms/:keyPUT更新表单
/api/forms/:keyDELETE删除表单

表单数据

接口方法说明
/api/forms/:key/dataGET获取提交数据列表
/api/forms/:key/data/:idGET获取单条数据详情
/api/forms/:key/dataPOST新增提交数据
/api/forms/:key/data/:idPUT更新提交数据
/api/forms/:key/data/:idDELETE删除提交数据

数据查询参数

参数类型说明
pagenumber页码
sizenumber每页数量
sortstring排序字段
orderstring排序方向(asc/desc)
filterobject筛选条件

Webhook

配置 Webhook

通过 API 或管理面板配置 Webhook:

{
  "url": "https://your-server.com/webhook",
  "events": ["form_data_add", "form_data_update", "form_data_delete"],
  "headers": {
    "X-Custom-Header": "value"
  }
}

Webhook 事件

事件触发时机
form_data_add新数据提交
form_data_update数据被修改
form_data_delete数据被删除

Webhook 请求体

{
  "event": "form_data_add",
  "formKey": "abc123",
  "data": {
    "id": "data_001",
    "fields": {
      "name": "张三",
      "email": "zhangsan@example.com"
    },
    "createdAt": "2024-01-15T10:30:00Z"
  }
}

验证 Webhook

验证 Webhook 请求的合法性,确保来自 Mobyform:

  • 检查请求来源 IP
  • 验证签名头(如果配置)

速率限制

API 请求受速率限制保护:

套餐限制
Pro1,000 次/月
Business10,000 次/月
Enterprise自定义

超过限制后会返回 429 Too Many Requests。

错误处理

HTTP 状态码

状态码说明
200请求成功
201创建成功
400请求参数错误
401未授权(API 密钥无效)
403权限不足
404资源不存在
429请求过于频繁
500服务器内部错误

错误响应格式

{
  "error": {
    "code": "INVALID_REQUEST",
    "message": "描述错误原因"
  }
}

代码示例

cURL — 获取表单列表

# 分页获取所有表单
curl -X GET "https://api.mobyform.com/api/forms?page=1&size=10" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

JavaScript/Node.js — 获取表单数据

// 获取指定表单的提交数据
const response = await fetch(
  'https://api.mobyform.com/api/forms/abc123/data?page=1&size=20',
  {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
  }
);

const result = await response.json();
console.log(`提交总数: ${result.total}`);
console.log('数据:', result.data);

Python — 创建表单提交

import requests

# 向表单提交数据
url = "https://api.mobyform.com/api/forms/abc123/data"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
}
payload = {
    "fields": {
        "name": "李四",
        "email": "lisi@example.com",
        "feedback": "产品体验很棒!"
    }
}

response = requests.post(url, json=payload, headers=headers)
print(f"状态码: {response.status_code}")
print(f"创建结果: {response.json()}")

分页

所有列表接口均支持通过 page 和 size 查询参数进行分页。

  • page — 要获取的页码(从 1 开始)
  • size — 每页返回的条目数(默认:20,最大:100)

请求示例:

GET /api/forms?page=2&size=10

响应示例:

{
  "data": [...],
  "total": 56,
  "page": 2,
  "size": 10,
  "totalPages": 6
}

如果未提供分页参数,API 默认使用 page=1、size=20。

错误码

API 在响应体中使用结构化错误码,帮助你以编程方式处理错误:

错误码名称说明
INVALID_REQUEST无效请求请求体或参数格式不正确
AUTHENTICATION_FAILED认证失败API 密钥缺失、无效或已过期
PERMISSION_DENIED权限不足API 密钥没有所需的权限范围
RESOURCE_NOT_FOUND资源不存在请求的表单、提交或资源不存在
RATE_LIMITED请求频率超限已超过允许的请求次数
VALIDATION_ERROR校验错误提交的数据未通过字段校验规则
INTERNAL_ERROR内部错误服务器发生意外错误,请稍后重试

Webhook 签名验证

配置 Webhook 密钥后,Mobyform 会使用 HMAC-SHA256 对每次 Webhook 请求的内容进行签名。签名会通过 X-Webhook-Signature 请求头发送。你应当验证此签名以确认请求的真实性。

Node.js 验证

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload, 'utf8')
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

// 在 Express 处理器中使用
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-webhook-signature'];
  const rawBody = JSON.stringify(req.body);

  if (!verifyWebhookSignature(rawBody, signature, 'YOUR_WEBHOOK_SECRET')) {
    return res.status(401).send('签名无效');
  }

  // 处理 Webhook 事件
  console.log('已验证事件:', req.body.event);
  res.status(200).send('OK');
});

Python 验证

import hmac
import hashlib

def verify_webhook_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode('utf-8'),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

# 在 Flask 处理器中使用
@app.route('/webhook', methods=['POST'])
def handle_webhook():
    signature = request.headers.get('X-Webhook-Signature', '')
    if not verify_webhook_signature(request.data, signature, 'YOUR_WEBHOOK_SECRET'):
        return '签名无效', 401

    event = request.json
    print(f"已验证事件: {event['event']}")
    return 'OK', 200

最佳实践

  • 妥善保管密钥 — 不要将 API 密钥暴露在前端代码中
  • 处理错误 — 实现完善的错误处理和重试逻辑
  • 遵守速率限制 — 合理控制请求频率
  • 使用 Webhook — 优先使用 Webhook 获取实时通知,而非轮询 API

下一步

  • 自定义域名 — 配置自己的域名
  • 集成 — 使用内置集成无需编码

GDPR 控制

数据隐私控制和面向 GDPR 工作流的管理功能。

自定义域名

使用你自己的域名来托管和分享表单。

目录

API 接口
认证
API 密钥
使用方式
密钥管理
主要 API
表单管理
表单数据
数据查询参数
Webhook
配置 Webhook
Webhook 事件
Webhook 请求体
验证 Webhook
速率限制
错误处理
HTTP 状态码
错误响应格式
代码示例
cURL — 获取表单列表
JavaScript/Node.js — 获取表单数据
Python — 创建表单提交
分页
错误码
Webhook 签名验证
Node.js 验证
Python 验证
最佳实践
下一步