选择节点开发方式
n8n 有两种节点开发方式:声明式和编程式。新节点默认采用声明式,请优先使用这种方式构建。
声明式:
- 使用基于 JSON 的语法,编写更简单,降低引入错误的风险。
- 更适应未来的演进。
- 支持 REST API 集成。
- 无需
execute()方法,减少需要编写和维护的代码。
如果不确定需要哪种方式,请从声明式开始。n8n-node 工具可以生成声明式节点脚手架,构建声明式节点则提供完整示例。
何时需要编程式
编程式代码更多,需要用自行维护的代码实现节点行为,应仅在特殊情况下使用。节点属于以下情况时,使用编程式:
- 触发节点。
- 不基于 REST 的节点,包括需要调用 GraphQL API 或使用外部依赖的节点。
- 需要在路由能力之外转换数据的节点。声明式可以通过
routing.request.preSend修改请求、通过routing.output.postReceive修改 API 响应。如果节点需要独立于单次 API 调用处理输入数据项,请使用编程式。 - 需要基于功能的版本控制,在代码中通过
this.isNodeFeatureEnabled()实现不同行为分支的节点。声明式节点仍可使用轻量版本控制,并通过@feature在displayOptions中读取功能标志。版本控制类型的更多说明,请参阅节点版本控制。
如果节点不属于上述情况,请使用声明式。
信息
触发节点必须使用编程式
声明式不支持触发节点。所有触发节点都必须使用编程式,即使同一服务的操作节点采用声明式。
可以在一个节点软件包中混用两种方式。例如,提交验证的软件包,可以包含同一服务的声明式操作节点和编程式触发节点。
数据处理差异
声明式与编程式的主要区别,在于如何处理输入数据和构建 API 请求。编程式需要 execute() 方法,读取输入数据和参数后构建请求。声明式通过 routing 键处理,该键位于 operations 对象中。节点参数及 execute() 方法的更多信息,请参阅节点基础文件。