معرفی فریم وورک FeathersJS

فریم وورک FeatherJS در واقع مجموعه ای از ابزار هایی هست که ایجاد آسان وب سرویس های مبتنی بر REST Full و سوکت را امکان پذیر می کند. شاید به جرات بتوان گفت که این مجموعه آماده سازی یک وبسرویس را به حدی آسان تر می کند که توسعه دهنده می تواند در عرض چند دقیقه نمونه اولیه محصول را تولید و وبسرویس آماده جوابدهی باشد. چرا که بسیاری از چالش های مربوط به ارتباط و کوئری دیتابیس ها و ایجاد سرویس دهنده که یک بک اند کار با آن مواجه هست با چند خط کد و دستور آماده استفاده می شود.علاوه بر این FeathersJS به لحاظ تبعیت از معماری MVC بسیار مقیاس پذیر بوده و یادگیری استفاده از آن بسیار آسان تر می کند.ویژگی های مهم فریم وورک FeathersJS ایجاد آنی وبسرویس برای تمامی سرویس هایی که مدنظر باشدرابط یکپارچه با بیشتر پایگاه داده های محبوب که امکان استفاده همزمان از چندین پایگاه داده در یک پروژه را با یک ارتباط یکپارچه برای توسعه دهنده آسان می کند.پشتیبانی از اکثر استراتژی های احراز هویتامکان نوشتن hook برای هر سرویس دهندهخطایابی (Error Handling) آسان تر پشتیبانی کامل از انواع ارتباطات real-time مثل socket.io و primus در صورتی که علاقه مند به بررسی بیشتر ویژگی های جالب این مجموعه باشید از این لینک می توانید سایر موارد قابل توجهی که این مجموعه برای توسعه دهنده ارایه می دهد مطالعه کنید.پیشنیاز ها برای استفاده از FeathersJSبرای شروع کار با فریم وورک FeathersJS توسعه دهنده می بایستی تا با سینتکس ES6 در جاوااسکریپت و همینطور کار با NodeJs آشنایی داشته باشد و در صورتی که در مورد پروتکل های HTTP و HTTPS و ایجاد وبسرویس های REST آشنایی داشته باشد قطعا در یادگیری سریعتر این فریم وورک کمک شایانی خواهد کرد.نصب و شروع کارمجموعه FeathersJS دارای یک CLI هست که این امکان را به توسعه دهنده می دهد تا با کمک دستورات این CLI به راحتی یک اپلیکیشن مبتنی بر فریم وورک FeathersJS را ایجاد و سپس با کمک دستورات بعدی سرویس ها، یا پیکربندی احراز هویت و ... را انجام دهد.برای نصب این CLI از دستور زیر استفاده می کنیم:> npm install @feathersjs/cli -gپس از نصب موفق این CLI شما می توانید با استفاده از command-line از دستورات feathers استفاده کنید. با استفاده از دستور زیر می توانید ورژن feathers خود را مشاهده کنید:> feathers --versionکه در حال حاضر باید ورژن 3.8.2 یا بالاتر باشد.حالا ما می توانیم با استفاده از دستور زیر اولین برنامه مبتنی بر این فریم وورک را ایجاد کنیم:> feathers generate appپس از اجرای این کامند سوالاتی در مورد توضیحات پروژه پرسیده خواهد شد که پس از وارد کردن آن چارچوب کاری شما برای استفاده از فریم وورک FeathersJS آماده خواهد بود. اما پس از نصب و آماده شدن فریم وورک برای شروع کار یک سرویس به نام messages که در بیشتر مثال ها و مستندات خود FeathersJS از همین سرویس نام برده شده استفاده خواهد شد. در این مثال سعی می کنیم از سرویس In-Memory استفاده کنیم و در بخش های بعدی کار کردن با پایگاه داده ها و آداپتور های مختلف را بررسی خواهیم کرد.برای نصب سرویس با استفاده از CLI از دستور زیر استفاده می کنیم:> feathers generate service پس از اجرا سوالاتی در مورد نوع سرویس خواهد شد که ما نوع سرویس را همانطور که گفتیم In-Memory و نام سرویس را messages استفاده خواهیم کرد. پس از اجرای موفق دستور با کامند npm start در روت برنامه خود اپ را اجرا خواهیم کرد که در صورت بروز ندادن مشکلی با پیغام زیر مواجه خواهیم شد :info: Feathers application started on http://localhost:3030که این یعنی وب سرویس در پورت 3030 آدرس localhost یا همون 127.0.0.1 آماده سرویس دهی می باشد که این مورد از طریق فایل کانفیگ در روت اصلی برنامه قابل تغییر می باشد. حال سرویس messages که ایجاد کردیم از طریق آدرس http://localhost:3030/messages قابل دسترسی هست.متد هایی که وب سرویس های FeathersJS از آن ها پشتیبانی می کنند به صورت عمده عبارتند از:createاین متد در واقع برای ایجاد دیتای جدید که برای سرویس مد نظر خواهد بود و از طریق متد وب POST قابل استفاده می باشد. در صورتی که ما برای داده ای که ارسال می کنیم id در نظر نگیریم وب سرویس به طور اتوماتیک به هر دیتا که ساخته می شود id با شروع از 0 اختصاص خواهد داد. به طور مثال اگر با متد POST به وب سرویس مقدار text : hello world را ارسال کنیم وب سرویس در جواب مقدار زیر را برگشت خواهد داد:که این یعنی دیتا با مقدار text : hello world با id : 0 در سرویس messages دخیره شد.updateاین متد در واقع برای جایگزینی کامل دیتای موجود با دیتای جدید هست که معادل متد PUT در وب ریکویست هست. این متد دو پارامتر که یکی id و دیگری دیتایی هست که قرار هست جایگزین دیتای قبلی شود.removeهمونطور که از اسم این متد پیداست برای پاک کردن کامل دیتای موجود هست که با گرفتن id دیتای موجود مربوط به اون id رو پاک می کنه. این متد از طریق متد وبسرویس DELETE قابل فراخوانی هست.patchاین متد برای اضافه کردن بخش جدید به دیتای موجود یا تغییر بخشی از این دیتا مورد استفاده قرار می گیره از این متد برای تغییر فیلد های دیگر بدون تغییر کامل فیلد های موجود قبلی استفاده می شود و با استفاده از متد وبسرویس PATCH فراخوانی می شود. که پارامتر id و دیتای مورد نیاز جهت اضافه شدن یا تغییر فرستاده می شود.getاین متد دقیقا برای دریافت اطلاعات یک دیتای موجود با فرستادن id مورد نظر می باشد.که از طریق متد وب GET فراخوانی می شود. به طور مثال در این مورد بررسی ما برای سرویس messages با استفاده از آدرس زیر می توانیم اطلاعات مربوط به دیتای id = 0 را دریافت کنیم:GET http://localhost:3030/messages/0findبا کمک متد find می توان کوئری های پیچیده تری را اجرا نمود. به طور مثال برای دریافت اطلاعات مربوط به دیتاهایی که دارای مقدار active = true باشند با استفاده از کوئری زیر می توان به نتیجه رسید:GET http://localhost:3030/messages/?active=trueاین متد تمامی دیتاهایی که دارای فیلد active= true باشند را در پاسخ ارسال خواهد کرد.این متد یگی از پرکاربردترین و محبوب ترین متد های مورد استفاده در FeathersJS می باشد، که در پست بعدی بیشتر راجع این متد صحبت خواهد شد.5 متدی که ذکر شد چهار چوب اصلی سرویس های FeathersJS را تشکیل می دهند که کاربرد آن در تمامی پایگاه داده ها یکسان هست. به طور مثال شما می توانید با ایجاد سرویسی با آداپتور MongoDB با استفاده از همین متد ها به آسانی دیتا ایجاد، ویرایش، حذف کنید و کوئری های مورد نیاز را اجرا نمایید. همین امر می تواند رابط یکپارچه و منظمی برای کار با تمامی پایگاه داده ها در سیستم در اختیار توسعه دهنده قرار دهد و توسعه دهنده می تواند به آسانی به طور همزمان بسته به نیاز با پایگاه داده های مختلف کار کند.یکی از موارد مهم در سرویس های FeathersJS استفاده از hook ها هست. در سیستم FeathersJS هوک ها به دو صورت قبل و بعد از سرویس هستند. به طور مثال از اجرای متد find می توان هوکی در نظر گرفت که قبل از فرستادن این متد به سرویس به اجرا در آمده و عملیات مورد نیاز توسعه دهنده در آن انجام شود و سپس بعد پاسخگویی سرویس و قبل از ارسال به کلاینت می توان با استفاده از هوکی دیگر عملیات مورد نظر را بر روی داده ای که قرار است به سرویس گیرنده ارسال شود تغییر داد. تصویر زیر به طور شماتیک کاربرد هوک را در سرویس های FeathersJS نشان می دهد.چون بحث هوک در FeathersJS بسیار کاربردی و پیچیده است برای درک بیشتر در پست بعدی مفصل صحبت خواهد شد.این مطلب بیشتر جهت آشنایی با فریم وورک FeathersJS می باشد و به صورت کلی این فریم وورک را بررسی و معرفی کرده است. که در پست های بعدی در نظر دارم تا به موارد زیر پرداخت کنم:کار با انواع پایگاه داده ها (کد و وبسرویس)کار با هوک های Before و Afterاستفاده از وب سوکت Socket.io در سرویس هااستفاده از Channels در ارتباط های real-timeکنترل Error در وبسرویس