هنگام ساخت یک برنامه وب تک صفحهای (SPA) یا یک برنامه تلفن همراه، معمولا برای اتصال فرانت-اند و بک-اند باید یک Web API (REST ، GraphQL و موارد دیگر) را پیاده سازی کنیم. از نظر فنی این کار چندان دشوار نیست، اما عواقب ناخوشایندی دارد.
دو سیاره را تصور کنید. سیاره "فرانت-اند" با جاوااسکریپت صحبت میکند و سیاره "بک-اند" نیز با جاوااسکریپت یا هر زبان پیشرفته دیگری صحبت میکند.
حال بیایید بگوییم که این سیارات برای تشکیل یک کلمه به نام "اپلیکیشن" نیاز به همکاری گسترده دارند.
متأسفانه، سیارات قادر به برقراری ارتباط مستقیم با یکدیگر با استفاده از زبان مادری خود نیستند و باید به شخص ثالثی به نام " web API " اعتماد کنند که به زبانی بسیار پیچیده صحبت میکند.
در واقع زبان اکثر API های وب به ترکیبی از URL ها، چند فعل HTTP (GET ، POST و ...) و گاهی JSON محدود شده است.
API های وب که با GraphQL در ارتباطند پیشرفته ترند اما از امکانات یک زبان برنامه نویسی مانند جاوااسکریپت بسیار عقب هستند:
قرار دادن یک زبان ابتدایی بین فرانت و بک، باعث میشود منابع زیادی مصرف شوند و تجربه توسعه را خراب میکند.
مشکل دیگر این است که API وب یک لایه به مشکلات اضافه میکند که شامل طراحی، اجرا، تست، مستندات و موارد دیگر میشود و همه اینها برای توسعه دهنده اذیت کننده است.
اما بدترین چیز این است که ساختن API وب شما را مجبور میکند کیفیت پایگاه کد خود را پایین بیاورید. در حقیقت خشک و منسجم نگه داشتن کد هنگامی که فرانت وب و بک آن توسط یک API وب از هم جدا میشوند، کاملا چالش برانگیز است.
حال تصور کنید که میتوانیم از شر API وب خلاص شویم. فرض کنید فرانت-اند میتواند با استفاده از زبان مادری خود مستقیما با بک-اند ارتباط برقرار کند. به نظر شما این عالی نیست؟
خبر خوب این است که امروزه به لطف مجموعهای از کتابخانهها به نام Layr این امر امکانپذیر است.
با بهره گیری از Layr، فرانت و بک از نظر جسمی از هم جدا شدهاند (در محیطهای مختلفی اجرا میشوند) اما از نظر منطقی متحد میشوند (مانند اینکه در یک محیط هستند).
در پشت پرده، Layr به مکانیزم RPC متکی است. بنابراین به صورت سطحی میتوان چیزی مانندCORBA ، Java RMI یا NET CWF. را مشاهده کرد.
اما Layr کاملا متفاوت است:
Layr سفر خود را با JavaScript / TypeScript آغاز میکند، اما مسئلهای که با آن روبهرو است جهانی است و میتواند به هر زبان شی گرا منتقل شود.
مثال
بیایید مثال کلاسیک شمارنده را پیاده سازی کنیم تا ببینیم ساخت یک برنامه کامل با Layer چگونه به نظر میرسد.
ابتدا مدل داده و منطق تجاری را در قسمت بک-اند پیاده سازی میکنیم:
ممنونم