مدیریت داده‌ها در ورک‌فلوهای n8n

Calendar

انتشار:

1404/06/03
Update Calendar

به روز رسانی:

1404/07/15

ساختار داده‌ها در n8n

در n8n همه اطلاعاتی که بین نودها جابه‌جا می‌شوند، در قالب یک آرایه از آبجکت‌ها قرار دارند. هر آیتم داخل این آرایه معمولاً در کلید json ذخیره می‌شود. این کلید شامل داده‌های متنی، عددی یا هر نوع داده ساده دیگر است. اگر داده‌ای مثل تصویر یا فایل وجود داشته باشد، در کلید binary قرار می‌گیرد. در این بخش اطلاعاتی مثل نوع فایل، پسوند و نام فایل هم نگهداری می‌شود. اگر شما در نودهای Function یا Code مستقیماً داده‌ای بدون کلید json یا بدون قرار دادن در آرایه وارد کنید، n8n به صورت خودکار این کار را برای شما انجام می‌دهد؛ اما اگر مشغول ساخت یک نود اختصاصی باشید، باید خودتان این ساختار را رعایت کنید.

برای مثال در تصویر زیر نمونه‌ای از داده متنی و داده باینری را می‌بینید که به عنوان ورودی و خروجی نود استفاده شده‌اند.

نمای نمونه JSON و Binary

پردازش آیتم‌ها توسط نودها

نودها می‌توانند چندین آیتم داده را به صورت هم‌زمان پردازش کنند. به این معنا که اگر چند داده ورودی وارد نود شوند، نود می‌تواند برای هر کدام عملیات جداگانه انجام دهد.

به عنوان مثال، فرض کنید یک نود RSS Feed در ورک‌فلو قرار داده‌اید تا خبرهای جدید یک سایت را دریافت کند. این نود معمولا چند آیتم مختلف به عنوان خروجی برمی‌گرداند؛ مثلا 50 خبر آخر سایت. وقتی این خروجی وارد یک نود بعدی مثل HTTP Request می‌شود، n8n هر آیتم را جداگانه پردازش می‌کند. یعنی اگر 50 خبر دریافت شده باشد، برای هر خبر یک ریکوئست فرستاده می‌شود. به این ترتیب اگر تعداد خبرها بیشتر یا کمتر باشد، نود بعدی همیشه همان تعداد خروجی ایجاد می‌کند و شما لازم نیست چیزی را به صورت دستی تکرار کنید.

پردازش آیتم‌ها توسط نودها

جریان داده‌ها در نودها

داده‌ها مرحله به مرحله از نود ورودی به خروجی منتقل می‌شوند. هر آیتمی که وارد یک نود می‌شود، بعد از پردازش یک خروجی جدید ایجاد می‌کند و این خروجی به همان آیتم ورودی متصل باقی می‌ماند. این اتصال باعث می‌شود اگر در مراحل بعدی نیاز داشتید دوباره به داده قبلی مراجعه کنید، بتوانید به راحتی آن را پیدا کنید.

نمای اتصال ورودی و خروجی بین دو نود

تغییر شکل داده‌ها (Data Transformation)

گاهی داده‌هایی که از سرویس‌های خارجی دریافت می‌کنید با ساختار n8n سازگار نیستند. برای اینکه بتوانید از این داده‌ها استفاده کنید لازم است آن‌ها را تغییر دهید. n8n برای این کار نودهای مخصوصی دارد. با کمک این نودها می‌توانید کارهایی مانند ترکیب چند آیتم در یک آیتم، کم کردن تعداد داده‌ها، حذف موارد تکراری، مرتب‌سازی، تقسیم یک آیتم بزرگ به چند آیتم کوچک‌تر یا حتی خلاصه‌سازی داده‌ها را انجام دهید. مثلا اگر یک فید RSS پنجاه خبر را به شما برگرداند، شما می‌توانید با استفاده از Limit تعداد ورودی‌های نود بعدی را محدود به 3 عدد کنید.

تغییر شکل داده‌ها

پردازش داده با کدنویسی

گاهی فقط تغییرات ساده کافی نیست و لازم است روی داده‌ها پردازش پیچیده انجام دهید. در این حالت می‌توانید از نود Function یا Code استفاده کنید. در این نودها می‌توانید کد جاوااسکریپت یا پایتون بنویسید تا داده‌ها را دقیقاً همان‌طور که می‌خواهید تغییر دهید. برای مثال، می‌توانید یک فیلد جدید به داده اضافه کنید، یک فرمت خاص برای تاریخ‌ها بسازید یا حتی داده‌ها را محاسبه و ترکیب کنید. این قابلیت به شما اجازه می‌دهد تا روی داده‌ها کنترل کامل داشته باشید.

در تصویر زیر با استفاده از کد جاوا اسکریپت طول سه داده به صورت عددی نمایش داده شده است:

پردازش داده با کدنویسی

پین کردن داده‌ها (Data Pinning)

وقتی در حال توسعه یک ورک‌فلو هستید، ممکن است چندین بار بخواهید نودها را تست کنید. اگر هر بار داده‌ها دوباره از منبع اصلی گرفته شوند، زمان بیشتری صرف می‌شود و همچنین منابع سرویس خارجی مصرف می‌شود. برای حل این مشکل می‌توانید داده‌ها را پین کنید. پین کردن یعنی یک بار خروجی نود را ذخیره کنید و در دفعات بعد به جای درخواست دوباره، همان داده ذخیره‌شده استفاده شود. این کار مخصوص محیط تست و توسعه است و در اجرای واقعی (Production) استفاده نمی‌شود. همچنین توجه داشته باشید داده‌های باینری امکان پین شدن ندارند.

Data Pinning

نگاشت داده‌ها (Data Mapping)

در هر ورک‌فلو معمولاً نیاز دارید داده‌های یک نود را در نود دیگر استفاده کنید. این کار را نگاشت داده می‌گویند. در n8n می‌توانید به دو روش داده‌ها را نگاشت کنید: یکی با انتخاب مستقیم فیلدها از رابط کاربری و دیگری با نوشتن Expression. نگاشت داده باعث می‌شود اطلاعات بین نودها به راحتی منتقل شوند و هر نود بتواند بر اساس داده قبلی کار خود را انجام دهد.

Data Mapping

آیا توانستیم چالش شما را حل کنیم؟