انتخاب رویکرد ساخت نود شما#
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
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 نیست }