还在为 API 接口参数发愁?让 n8n 帮你自动“变魔术”
各位 n8n 玩家,大家好,我是 N8N大学 的主编。今天我们要聊一个硬核且高频的场景:API 调用。
你有没有遇到过这种情况:同一个 API 接口,因为业务需求不同,每次请求的 Header 里的 Authorization Token 要变,或者 URL 里的 user_id 要根据上一步的数据动态调整?
如果每次都要手动复制粘贴,那还算什么自动化?简直是“伪自动化”。今天,笔者就带大家彻底搞懂 n8n 中最灵活的“灵魂”功能——动态节点配置。学会它,你的工作流将拥有无限可能。
核心概念:什么是 $parameter 和表达式?
在 n8n 的 HTTP Request 节点里,藏着一个巨大的宝库。当你点击任何输入框(比如 URL、Headers、Body)旁边的橙色小灯泡时,其实就是在唤醒“表达式”模式。
而我们今天的核心主角,就是 {{ $parameter.参数名 }} 这种写法。它就像是一个“指针”,告诉 n8n:“别急着发请求,先去上游节点的数据里,把对应的值拿过来,再填进去。”
通俗点说,这就是 n8n 的“数据粘合剂”。
实战演练:3步搞定动态 Header 与 URL
光说不练假把式。假设我们要做一个场景:从一个表格里读取用户 ID 和对应的 API Token,然后动态去请求用户详情。
第一步:准备“原料”(上游节点)
我们需要一个源头。这里用 Set 节点 模拟数据(实际场景可能是 Google Sheets 或 Airtable 节点)。
- 添加一个 Set 节点:
- Fields to Set:
user_id=886 - Fields to Set:
my_token=Bearer xyz123456
这样,下游节点就能拿到这两个变量了。
第二步:配置 HTTP Request 节点(重头戏)
现在,添加一个 HTTP Request 节点。我们来玩点花样。
1. 动态 URL:
在 URL 输入框,我们不写死链接,而是写:
https://api.example.com/users/{{ $parameter.user_id }}
这里,n8n 会自动把 user_id 替换成上游给的 886。
2. 动态 Request Headers(请求头):
点击 Headers 旁边的“Add Field”,选择“Use Expression”(使用表达式)。这里有个坑,很多人填错格式。
正确的 Header 设置应该是这样的(JSON 格式):
{
"Authorization": "={{ $parameter.my_token }}",
"Content-Type": "application/json"
}
注意:Authorization 的值部分,我们填入 {{ $parameter.my_token }}。这样,每次请求都会带上当前行数据的 Token。
第三步:测试与验证
点击“Execute Node”。查看输出结果。你会发现,实际发出的请求 URL 变成了 https://api.example.com/users/886,并且 Header 里自动带上了 Authorization: Bearer xyz123456。
进阶技巧:关于 $parameter 的两个“坑”
虽然 $parameter 很强大,但笔者在实战中也踩过不少坑,这里分享两个高频报错原因:
1. 数据层级搞错了:
如果你的上游节点输出的数据结构是 { "data": { "id": 123 } },那你直接写 {{ $parameter.id }} 是取不到值的,因为 id 被包在 data 里面了。
此时你应该写:{{ $parameter.data.id }}。一定要先点开左侧的上一节点输出,看清数据的层级结构。
2. 类型转换的隐秘角落:
n8n 的表达式非常智能,但有时候太智能了。如果你的上游传过来的是一个数字 123,而 API 要求 URL 里必须是字符串 "123",n8n 通常会自动处理。但如果你在 Header 里拼接字符串,比如写成 "token-" + {{ $parameter.code }},这在某些老版本 n8n 或特定环境下可能会报错。
稳妥起见,善用 n8n 内置的函数,比如 {{ $parameter.code.toString() }},确保万无一失。
FAQ:你可能还想问
Q1: 如果上游没有传值,HTTP 节点会报错吗?
A: 会的。如果表达式解析为空,n8n 可能会发送一个残缺的请求(比如 URL 变成了 /users/),导致 404 或 500 错误。建议在 HTTP 节点前加一个 IF 节点做数据校验。
Q2: 除了 $parameter,还有别的选择吗?
A: 当然。$json 也是常用的,它通常指向当前节点的输入数据。但在复杂的 Workflow 中,使用 $parameter 配合 Set 节点,逻辑会更清晰,方便维护。
Q3: 动态配置能修改 Body 吗?
A: 绝对可以!原理完全一样。在 Body 选择 "Use Expression",然后填入 {{ JSON.stringify($parameter) }} 或者构建更复杂的 JSON 对象,都能实现。
总结与资源
掌握了动态节点配置,你的 n8n 工作流才算真正“活”了起来。它不再是死板的流水线,而是能根据数据环境自我调整的智能程序。
我是 N8N大学 的主编,希望这篇硬核教程能帮你避开弯路。如果觉得有用,欢迎在 N8N大学 社区分享你的自动化案例!