跳到主要内容

API 幂等性

在公共 API POST 请求中发送 Idempotency-Key 请求头,可使重试返回第一次成功的响应,避免重复执行请求。

信息

功能可用范围

自 n8n 2.45.0 起,以下方案或版本支持 n8n API 幂等性:

  • **n8n Cloud:**Starter、Pro、Enterprise。
  • **自托管:**所有版本。

免费试用期间无法使用。

此请求头可选。不发送时,每个 POST 都会正常执行。

发送幂等键 ​

在第一次 POST 中设置 Idempotency-Key 请求头,重试时再次发送相同请求头。每个独立请求使用新键。UUID v4 是合适的选择,但 n8n 不强制要求该格式。

键值必须包含 1 到 128 个可见 ASCII 字符,可使用字母、数字和符号,不能包含空格。n8n 会忽略键前后的空格。空值或仅含空格的值等同于未发送该请求头。

curl -X POST \
'https://<your-instance>/api/v1/workflows' \
-H 'accept: application/json' \
-H 'X-N8N-API-KEY: <your-api-key>' \
-H 'Idempotency-Key: <idempotency-key>' \
-H 'Content-Type: application/json' \
-d '<workflow-json>'

将 <workflow-json> 替换为工作流请求体。创建 API 密钥的方法请参阅身份验证。

键过长、包含空格或其他不允许的字符时,会返回 400,且不会创建资源。消息为 Idempotency-Key must be 1 to 128 visible ASCII characters.

哪些请求使用幂等键 ​

n8n 会在创建资源或启动工作的 POST 请求中使用此请求头,例如创建工作流或调用 POST /api/v1/executions/<execution-id>/retry。端点参考会在每个支持的 POST 中列出该请求头。

对于 GET、PUT、PATCH 和 DELETE,n8n 会忽略该请求头。

n8n 保留响应的时间 ​

从发送键时起,n8n 将第一次成功的响应保留 12 小时。在此窗口内重试,会返回该响应,不再执行 POST。

12 小时后,相同键会再次执行 POST,可能创建重复资源。下一次操作请发送新键。

键属于用户,而非某个 API 密钥。同一用户的两个 API 密钥共享已存储的响应。不同用户使用相同键,会被视为独立请求。

重试相同请求 ​

再次发送相同键,以及完全相同的路径、查询字符串和请求体,包括 JSON 字段顺序和所有空格。匹配时,返回与第一次响应相同的状态码和 JSON 响应体。

返回文件的 POST 不在支持范围内,重试时会再次执行请求。

键相同,请求不同 ​

如果路径、查询字符串或请求体不同,n8n 会返回 422,且不执行 POST:

{
"message": "This Idempotency-Key was already used with a different request."
}

更改后的请求请发送新键,首次创建的资源保持不变。

请求仍在进行中 ​

如果第一次请求尚未完成,n8n 会返回 409:

{
"message": "A request with this Idempotency-Key is already in progress."
}

等待后,再次发送相同键和相同请求。两个同时使用同一键的请求不会创建两个资源:其中一个完成工作,另一个收到 409;如果第一个已完成,则收到首次响应。

请求失败时 ​

如果 POST 失败,n8n 不会保留该响应。使用相同键和相同请求重试,会再次执行 POST。

如果第一次 POST 因请求体无效而返回 400,可修正请求体后再次发送相同键。

幂等键的限制 ​

幂等请求头仅适用于 /api/v1 下的公共 API 端点。

相关资源 ​

本文为社区中文翻译。查看对应英文原文