@devlikeapro/n8n-openapi-node

中文文档
0.1.4发布于 2025/02/24MITTypeScriptESM + CJS构建来源已验证近 30 天下载 35.9万

将 OpenAPI 规格转换为 n8n 节点

中文使用文档
文档目录14 节
  1. 安装
  2. 使用量
  3. 资源
  4. 运行
  5. 查询参数
  6. 请求正文
  7. 页眉
  8. 资源
  9. 运行
  10. 字段
  11. 我只有OpenAPI v2 spec, 我能做什么?
  12. 我有Openapi.yaml spec, 我能做什么?
  13. 如何从 OpenAPI v3 spec 设置证书 ?
  14. 为什么不用我的OpenAPI光谱?

@devlikiapro/n8n-openapi-节点

openapi logo n8n logo

转身 打开API (单位:千美元)斯瓦格语Name显示为 a n8n 节点来啊!

npm version


快速启动

如果您有 OpenAPI 规格 - 您可以在几分钟内轻松创建 您的社区节点 为n8n!

还需要创作和出版 n8n-nodes-<yourproject> npm 软件包, 但是您可以使用这个软件包生成大部分代码.

我们建议使用回购 n8n-nodes-<yourproject> 软件包 :

查找更多真实世界的实例 使用大小写 节.

example

安装

添加 @devlikeapro/n8n-openapi-node 作为依赖关系

npm install @devlikeapro/n8n-openapi-node
# OR
pnpm add @devlikeapro/n8n-openapi-node
# OR
yarn add @devlikeapro/n8n-openapi-node

使用量

  1. 添加您的内容 openapi.json 改为 src/{NodeName} 文件夹 (使用时 打开API v3 财务报告和审定财务报表 乔森,参见 财务问题 如果你没有的话

  2. 让你的 Node.properties 从 OpenAPI v3 光谱 :

import {INodeType, INodeTypeDescription, NodeConnectionType} from 'n8n-workflow';
import {N8NPropertiesBuilder, N8NPropertiesBuilderConfig} from '@devlikeapro/n8n-openapi-node';
import * as doc from './openapi.json'; // <=== Your OpenAPI v3 spec

const config: N8NPropertiesBuilderConfig = {}
const parser = new N8NPropertiesBuilder(doc, config);
const properties = parser.build()

export class Petstore implements INodeType {
  description: INodeTypeDescription = {
    displayName: 'Petstore',
    name: 'petstore',
    icon: 'file:petstore.svg',
    group: ['transform'],
    version: 1,
    subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
    description: 'Interact with Petstore API',
    defaults: {
      name: 'Petstore',
    },
    inputs: [NodeConnectionType.Main],
    outputs: [NodeConnectionType.Main],
    credentials: [
      {
        name: 'petstoreApi',
        required: false,
      },
    ],
    requestDefaults: {
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
      baseURL: '={{$credentials.url}}',
    },
    properties: properties, // <==== HERE
  };
}

如何运作

N8NPropertiesBuilder 从 OpenAPI v3 提取到您的 n8n 社区节点的少数实体 :

  1. 资源 - 名单 标记 从 OpenAPI 光谱
  2. 运行 - 名单 业务 从 OpenAPI 光谱( aka) 行动 单位:n8n)
  3. 查询参数 - 名单 operation.parameters 从 OpenAPI 光谱
  4. 请求正文 - 名单 operation.requestBody.content 从 OpenAPI 光谱(仅用于 application/json(中文(简体) )
  5. 页眉 - 名单 operation.parameters 从 OpenAPI 光谱

资源

默认,它得到 标记 从 OpenAPI 光谱转换到 资源 以n8n计.

运行

默认,它得到 业务 从 OpenAPI 光谱转换到 行动 以n8n计.

查询参数

它会得到 operation.parameters 从 OpenAPI 光谱转换到 查询参数 以n8n计.

请求正文

它不创造请求正体的全部结构,只有一级属性. 所以,如果你有 请求身体作为

{
  "name": "string",
  "config": {
    "id": 0,
    "name": "string"
  }
}

它在 n8n 中创建了两个字段:

  • name - 有默认值 string
  • config - 有默认值 {"id": 0, "name": "string"}

页眉

它会得到 operation.parameters 从 OpenAPI 光谱转换到 页眉 以n8n计.

自定义

资源

你可以推翻如何提取的方法 资源 从 OpenAPI 标记 定义您的自定义 IResourceParser数字 :

import {IResourceParser} from '@devlikeapro/n8n-openapi-node';

export class CustomResourceParser {
  CUSTOM_DESCRIPTION = {
    "cats": "Cats are cute",
  }

  name(tag: OpenAPIV3.TagObject): string {
    // Your custom logic here
    if (tag['X-Visible-Name']) {
      return tag['X-Visible-Name'];
    }
    return lodash.startCase(tag.name);
  }

  value(tag: Pick<OpenAPIV3.TagObject, "name">): string {
    // Remove all non-alphanumeric characters
    const name = tag.name.replace(/[^a-zA-Z0-9_-]/g, '')
    return lodash.startCase(name)
  }

  description(tag: OpenAPIV3.TagObject): string {
    // Your custom logic here
    return this.CUSTOM_DESCRIPTION[tag.name] || tag.description || '';
  }
}

或者,你可以使用 DefaultResourceParser 并且只覆盖你需要的方法. 您可以在其中找到默认执行 src/资源配置软件

import {OpenAPIV3} from 'openapi-types';
import * as lodash from 'lodash';
import {DefaultResourceParser} from '@devlikeapro/n8n-openapi-node';

export class CustomResourceParser extends DefaultResourceParser {
  value(tag: OpenAPIV3.TagObject): string {
    return lodash.startCase(tag.name.replace(/[^a-zA-Z0-9_-]/g, ''));
  }
}

然后用进去 N8NPropertiesBuilder 内 config.resource数字 :

import {N8NPropertiesBuilder, N8NPropertiesBuilderConfig} from '@devlikeapro/n8n-openapi-node';
import * as doc from './openapi.json';

import {CustomResourceParser} from './CustomResourceParser';

const config: N8NPropertiesBuilderConfig = {
  resource: new CustomResourceParser()
}
const parser = new N8NPropertiesBuilder(doc, config);
const properties = parser.build()

查找真实的例子 @devlikiapro/n8n-nodes-waha (英语) 仓库.

运行

你可以推翻如何提取的方法 运行 从 OpenAPI 操作 定义您的自定义 IOperationParser数字 :

import {IOperationParser} from '@devlikeapro/n8n-openapi-node';

export class CustomOperationParser implements IOperationParser {
  shouldSkip(operation: OpenAPIV3.OperationObject, context: OperationContext): boolean {
    // By default it skips operation.deprecated
    // But we can include all operations
    return false
  }

  name(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
    if (operation['X-Visible-Name']) {
      return operation['X-Visible-Name'];
    }
    return lodash.startCase(operation.operationId)
  }

  value(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
    return lodash.startCase(operation.operationId)
  }

  action(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
    // How operation is displayed in n8n when you select your node (right form)
    return operation.summary || this.name(operation, context)
  }

  description(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
    return operation.description || operation.summary || '';
  }
}

或者,你可以使用 DefaultOperationParser 并且只覆盖你需要的方法. 您可以在其中找到默认执行 src/ 操作程序

import {DefaultOperationParser} from '@devlikeapro/n8n-openapi-node';

export class CustomOperationParser extends DefaultOperationParser {
  name(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
    // NestJS add operationId in format CatController_findOne
    let operationId: string = operation.operationId!!.split('_').slice(1).join('_');
    if (!operationId) {
      operationId = operation.operationId as string;
    }
    return lodash.startCase(operationId);
  }
}

然后用进去 N8NPropertiesBuilder 内 config.operation数字 :

import {N8NPropertiesBuilder, N8NPropertiesBuilderConfig} from '@devlikeapro/n8n-openapi-node';
import * as doc from './openapi.json';
import {CustomOperationParser} from './CustomOperationParser';

const config: N8NPropertiesBuilderConfig = {
  operation: new CustomOperationParser()
}
const parser = new N8NPropertiesBuilder(doc, config);
const properties = parser.build()

查找真实的例子 @devlikiapro/n8n-nodes-waha (英语) 仓库.

字段

您可以在字段末尾覆盖一些值, 当完全 properties 准备好了.

举个例子,你怎样可以覆盖 session 字段值( 该字段有 'default' 字符串默认值)到更多 n8n 合适的 =${$json.session}}数字 :

import {Override} from '@devlikeapro/n8n-openapi-node';

export const customDefaults: Override[] = [
  {
    // Find field by fields matching
    find: {
      name: 'session',
      required: true,
      type: 'string',
    },
    // Replace 'default' field value
    replace: {
      default: '={{ $json.session }}',
    },
  },
];

然后用进去 N8NPropertiesBuilder数字 :


import {N8NPropertiesBuilder, N8NPropertiesBuilderConfig} from '@devlikeapro/n8n-openapi-node';
import * as doc from './openapi.json';
import {customDefaults} from './customDefaults';

const parser = new N8NPropertiesBuilder(doc);
const properties = parser.build(customDefaults);

查找真实的例子 @devlikiapro/n8n-nodes-waha (英语) 仓库.

使用大小写

以下是由 OpenAPI 规格生成的 n8n 社区节点, 您可以用来参考 :

财务问题

我只有OpenAPI v2 spec, 我能做什么?

粘贴您的 OpenAPI 2. 0 定义 https://editor.swagger.io (英语) 选择 编辑 > 转换为 OpenAPI 3 从 菜单.

https://stackoverflow.com/a/59749691 (英语)

我有Openapi.yaml spec, 我能做什么?

粘贴您的相片 https://editor.swagger.io (英语) 选择 文件 > 保存为 JSON 从菜单.

如何从 OpenAPI v3 spec 设置证书 ?

现在你需要手动定义它. 检查 聊天Woot 节点 举个例子.

为什么不用我的OpenAPI光谱?

打开 有新问题 请附上 您的 openapi.json 文件并描述问题( 日志也有帮助 ).

版本与发布记录

@devlikeapro/n8n-openapi-node 共发布 5 个版本,首次发布于 2024/09/22;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.4latest2025/02/241.7 年前
0.1.32025/02/241.7 年前
0.1.22025/02/241.7 年前
0.1.12025/02/201.7 年前
0.1.02024/09/222 年前

关于 @devlikeapro/n8n-openapi-node 的常见问题

@devlikeapro/n8n-openapi-node 是什么?

将 OpenAPI 规格转换为 n8n 节点

如何安装 @devlikeapro/n8n-openapi-node?

在项目目录运行 npm install @devlikeapro/n8n-openapi-node,或使用 pnpm add / yarn add / bun add。

@devlikeapro/n8n-openapi-node 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@devlikeapro/n8n-openapi-node 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@devlikeapro/n8n-openapi-node 可以商用吗?

@devlikeapro/n8n-openapi-node 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@devlikeapro/n8n-openapi-node 的下载量有多少?

根据 npm 官方下载统计,@devlikeapro/n8n-openapi-node 在 2026/10/12 – 2026/11/10 这 30 天内被下载 359,099 次,日均约 11,970 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@devlikeapro/n8n-openapi-node 还在维护吗?

最新版本 0.1.4 发布于 2025/02/24(1.7 年前);至今共发布 5 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/09/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。