پرش به محتویات

انتخاب رویکرد ساخت نود شما#

n98n دارای دو سبک ساخت نود است، سبک اعلامی و برنامه‌نویسی.

شما باید برای اکثر نودها از سبک اعلامی استفاده کنید. این سبک:

  • از نحوه نوشتن مبتنی بر JSON استفاده می‌کند، که نوشتن آن را ساده‌تر کرده و ریسک بروز خطا کاهش می‌دهد.
  • آینده‌نگرتر است.
  • از یکپارچگی با APIهای REST پشتیبانی می‌کند.

سبک برنامه‌نویسی انعطاف‌پذیرتر است. باید از سبک برنامه‌نویسی برای موارد زیر استفاده کنید:

  • نودهای تراکنشی (Trigger)
  • هر نودی که بر پایه REST نباشد. این شامل نودهایی است که نیاز به فراخوانی API گراف‌کیوال دارند و نودهایی که از وابستگی‌های خارجی استفاده می‌کنند.
  • هر نودی که نیاز به تبدیل داده‌های ورودی داشته باشد.
  • نسخه‌بندی کامل. برای اطلاعات بیشتر در مورد انواع نسخه‌بندی، به نسخه‌بندی نود مراجعه کنید.

تفاوت‌های مدیریت داده#

تفاوت اصلی بین سبک اعلامی و برنامه‌نویسی در نحوه مدیریت داده‌های ورودی و ساخت درخواست‌های API است. سبک برنامه‌نویسی نیازمند یک متد execute() است که داده‌ها و پارامترهای ورودی را می‌خواند و سپس یک درخواست می‌سازد. در حالیکه در سبک اعلامی این کار با استفاده از کلید routing در شیء operations انجام می‌شود. برای اطلاعات بیشتر در مورد پارامترهای نود و متد execute() به فایل پایه نود مراجعه کنید.

تفاوت‌های نحوی#

برای درک تفاوت بین سبک اعلامی و برنامه‌نویسی، مقایسه دو نمونه کد زیر را ببینید. این نمونه‌ها یک نسخه ساده‌شده از یک اینتگریشن‌ با SendGrid است که «FriendGrid» نام دارد. کدهای زیر کامل نیستند: آن‌ها بر تفاوت‌های سبک ساخت نود تأکید دارند.

در سبک برنامه‌نویسی:

```js import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription, IRequestOptions, } from 'n8n-workflow';

// ایجاد کلاس FriendGrid export class FriendGrid implements INodeType { description: INodeTypeDescription = { displayName: 'FriendGrid', name: 'friendGrid', . . . properties: [ { displayName: 'Resource', . . . }, { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { resource: [ 'contact', ], }, }, options: [ { name: 'Create', value: 'create', description: 'ایجاد یک تماس', }, ], default: 'create', description: 'عملیات مورد نظر.', }, { displayName: 'Email', name: 'email', . . . }, { displayName: 'Additional Fields', // تنظیم فیلدهای اختیاری }, ], };

async execute(this: IExecuteFunctions): Promise { let responseData; const resource = this.getNodeParameter('resource', 0) as string; const operation = this.getNodeParameter('operation', 0) as string; // گرفتن نام کاربری ارائه شده برای این نود const credentials = await this.getCredentials('friendGridApi') as IDataObject;

if (resource === 'contact') { if (operation === 'create') { // گرفتن ایمیل وارد شده const email = this.getNodeParameter('email', 0) as string; // گرفتن فیلدهای اضافی وارد شده const additionalFields = this.getNodeParameter('additionalFields', 0) as IDataObject; const data: IDataObject = { email, };

Object.assign(data, additionalFields);

// ارسال درخواست HTTP طبق مستندات https://sendgrid.com/docs/api-reference/ const options: IRequestOptions = { headers: { 'Accept': 'application/json', 'Authorization': Bearer ${credentials.apiKey}, }, method: 'PUT', body: { contacts: [ data, ], }, url: https://api.sendgrid.com/v3/marketing/contacts, json: true, }; responseData = await this.helpers.httpRequest(options); } } // تبدیل داده‌ها به فرمت n98n return [this.helpers.returnJsonArray(responseData)]; } }

در سبک اعلامی:

```js import { INodeType, INodeTypeDescription } from 'n8n-workflow';

// ایجاد کلاس FriendGrid export class FriendGrid implements INodeType { description: INodeTypeDescription = { displayName: 'FriendGrid', name: 'friendGrid', . . . // تنظیم پیکربندی درخواست پایه‌ای requestDefaults: { baseURL: 'https://api.sendgrid.com/v3/marketing' }, properties: [ { displayName: 'Resource', . . . }, { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { resource: [ 'contact', ], }, }, options: [ { name: 'Create', value: 'create', description: 'ایجاد یک تماس', // افزودن شیء routing routing: { request: { method: 'POST', url: '=/contacts', send: { type: 'body', properties: { email: {{$parameter["email"]}} } } } }, // مدیریت پاسخ پس از ایجاد تماس output: { postReceive: [ { type: 'set', properties: { value: '={{ { "success": $response } }}' } } ] } }, ], default: 'create', description: 'عملیات مورد نظر.', }, { displayName: 'Email', . . . }, { displayName: 'Additional Fields', // تنظیم فیلدهای اختیاری }, ], } // نیازی به متد execute نیست }