@devlikiapro/n8n-openapi-节点

转身 打开API (单位:千美元)斯瓦格语Name显示为 a n8n 节点来啊!
快速启动
如果您有 OpenAPI 规格 - 您可以在几分钟内轻松创建 您的社区节点 为n8n!
还需要创作和出版 n8n-nodes-<yourproject> npm 软件包,
但是您可以使用这个软件包生成大部分代码.
我们建议使用回购 n8n-nodes-<yourproject> 软件包 :
- https://github.com/devlikeapro/n8n-nodes-petstore 互联网档案馆的存檔,存档日期2014-10-02 - 由 OpenAPI v3 spec生成的 pestore 示例
- https://github.com/n8n-io/n8n-nodes-starter (中文(简体) ) - 正式n8n节点启动模板
查找更多真实世界的实例 使用大小写 节.

安装
添加 @devlikeapro/n8n-openapi-node 作为依赖关系
npm install @devlikeapro/n8n-openapi-node
# OR
pnpm add @devlikeapro/n8n-openapi-node
# OR
yarn add @devlikeapro/n8n-openapi-node
使用量
-
添加您的内容
openapi.json改为src/{NodeName}文件夹 (使用时 打开API v3 财务报告和审定财务报表 乔森,参见 财务问题 如果你没有的话 -
让你的
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 社区节点的少数实体 :
- 资源 - 名单 标记 从 OpenAPI 光谱
- 运行 - 名单 业务 从 OpenAPI 光谱( aka) 行动 单位:n8n)
- 查询参数 - 名单
operation.parameters从 OpenAPI 光谱 - 请求正文 - 名单
operation.requestBody.content从 OpenAPI 光谱(仅用于application/json(中文(简体) ) - 页眉 - 名单
operation.parameters从 OpenAPI 光谱
资源
默认,它得到 标记 从 OpenAPI 光谱转换到 资源 以n8n计.
运行
默认,它得到 业务 从 OpenAPI 光谱转换到 行动 以n8n计.
查询参数
它会得到 operation.parameters 从 OpenAPI 光谱转换到 查询参数 以n8n计.
请求正文
它不创造请求正体的全部结构,只有一级属性. 所以,如果你有 请求身体作为
{
"name": "string",
"config": {
"id": 0,
"name": "string"
}
}
它在 n8n 中创建了两个字段:
name- 有默认值stringconfig- 有默认值{"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 社区节点, 您可以用来参考 :
- @devlikiapro/n8n-nodes-petstore (英语) - Petstore 实例生成自 Petstore openapi.json (英语)
- @devlikeapro/n8n-nodes-chatwoot (英语) - ChatWoot n8n社区节点 从 https://www.chatwoot.com/developers/api/ 互联网档案馆的存檔,存档日期2013-12-02也界定全权证书 手动)
- @devlikiapro/n8n-nodes-waha (英语) - 说吧 瓦哈岛 - 自办 怎样的 HTTP API 密码 你可以点击运行!
财务问题
我只有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 文件并描述问题( 日志也有帮助 ).