Malla文档

服务端工作流

运行在边缘的 HTTP 接口、Webhook、定时任务和表事件,支持实时测试运行。

用户指南

服务端工作流就是你的后端:API 接口、Webhook 处理程序、定时任务以及对数据变化的响应。它们与客户端工作流使用相同的可视化编辑器和步骤模型,但运行在 Cloudflare 的边缘网络上,可以使用密钥、写入数据表和发送邮件。

触发器

HTTP endpoint在 https://your-site/api/… 上响应 GET、POST、PUT、PATCH 或 DELETE,路径中可包含 :params。
Webhook一个 POST 接口,在执行第一步之前验证 Stripe、GitHub 或 HMAC 签名。
Cron以 UTC 计的五字段计划,例如 0 9 * * 1 表示每周一 9 点。
Table event原生表中有行被插入、更新或删除。
Called from pages客户端工作流通过 Run server workflow 运行它,可以允许所有人,或只允许已登录的访客。
Manual只能由测试运行或另一个服务端工作流触发。页面无法调用它。

构建服务端工作流

在 Logic 工作区中切换到服务端工作流并新建一个。选择触发器并添加步骤。在工作流内部,可以使用 input、user 和 steps。Return 会结束本次运行;对于接口,它的值就是响应体。

json
{
  "name": "Create order",
  "runtime": "server",
  "trigger": { "type": "http", "method": "POST", "path": "/orders", "auth": "user" },
  "input": { "schema": { "items": "array", "couponCode": "string?" } },
  "steps": [
    { "id": "order", "action": "core.tableInsert",
      "params": { "table": "orders", "values": { "userId": { "$expr": "user.id" }, "items": { "$expr": "input.items" } } } },
    { "id": "mail", "action": "core.sendEmail",
      "params": { "to": { "$expr": "user.email" }, "subject": "Order received", "text": "Thanks!" } },
    { "id": "done", "action": "core.return", "params": { "value": { "$expr": "{ orderId: steps.order.id }" } } }
  ]
}

发布后,该接口会在该环境的所有域名上生效:

bash
curl -X POST https://shop.example.com/api/orders \
  -H 'content-type: application/json' \
  -d '{ "items": [{ "sku": "mug", "qty": 2 }] }'

接口认证

  • public:任何人都可以调用。公开接口有限流。
  • user:只有已登录的访客可以调用;user 就是调用者。
  • apiKey:预留给服务器之间的调用(暂不可用)。

从页面调用

集成步骤(OpenAI、Stripe、Resend…)需要你的密钥,所以只能在服务端工作流中运行。要在按钮或表单中使用:

  1. 创建一个触发器为 Called from pages 的服务端工作流。选择谁可以调用它:所有人,或只有已登录的访客。
  2. 添加集成步骤。从 input 读取页面发送的内容,最后加上 Return。
  3. 在客户端工作流中添加 Run server workflow 并选择它。它的输入会成为 input;返回值会放在 steps.<id> 中。

Run in preview 以你的身份运行草稿。已发布的页面运行已发布的版本。留在客户端工作流中的插件步骤会显示 Move to a server workflow,它会替你完成这些步骤。

测试运行和历史记录

使用示例输入点击 Test run。步骤会实时流入运行面板,并显示每一步的结果和耗时。测试运行使用草稿;正式运行使用已发布的版本,因此正在进行的运行永远不会受到你的编辑影响。每次运行都会保存在运行历史中,并带有状态:运行中、等待中、成功或失败。

长时间运行的工作流

添加 Sleep(几分钟到几天)或 Wait for event 后,工作流会自动变成持久化工作流。持久化运行在重启后依然存在,会以退避策略重试失败的步骤,并且可以等待审批链接或付款确认。在另一个工作流中使用 Emit event 即可恢复一个等待中的运行。启动持久化运行的接口会立即返回它的 runId。

仅限服务端的步骤

  • HTTP request:调用任意 HTTPS API;私有地址会被拦截,超时 15 s,响应上限 1 MB。
  • Send email:发送文本或 HTML 格式的事务性邮件。
  • Query, get, insert, update, delete row:操作原生表。
  • Set visitor roles:授予或移除已注册访客的角色。
  • Run JavaScript:在沙箱中运行代码,可使用 input 和 steps,没有网络访问,也没有密钥。
  • Run operation:使用集成的密钥调用其操作。要在页面中使用,请参阅从页面调用。
  • Run server workflow、Return、Sleep、Wait for event、Emit event。

每个步骤都可以设置 retries(最多 5 次),延迟方式可选固定、线性或指数。

上限

站点套餐决定每月运行次数和每次运行的步骤数;参见套餐。内联运行在 30 秒后放弃。由表事件触发、又会写入数据表的工作流,在三层之后停止,因此工作流不会无限循环触发自己。