Lumen چیست؟
Lumen چیست؟ لومن یک پروژه جدید از Taylor Otwell، خالق Laravel است. Lumen یک «میکروفریمورک» به حساب میآید؛ به این معنی که نسخه کوچکتر، سریعتر و پایدارتر از یک فریمورک وباپلیکیشن کامل است. زبان PHP همچنین دارای دو میکروفریمورک محبوب دیگر به نامهای Slim و Silex نیز هست.
Lumen پایه و اساسی شبیه به Laravel دارد و دارای بسیاری از component های آن است؛ اما برخلاف لاراول، Lumen برای میکروسرویسها ساختهشده، و برای نرمافزارهایی که با کاربر تعامل دارند مناسب نیست (هرچند که میتواند برای هر چیزی استفاده شود). به همین ترتیب، ویژگیهای ابتدایی آن مانند sessions و Elixir و bootstrap و authentication Bootstrap بهطور پیشفرض فعال نیستند و انعطافپذیری کمتری برای گسترش و تغییر فایلهای bootstrap وجود دارد.
موارد مصرف Lumen چیست؟
Lumen برای پروژهها و component هایی است که میتوانند از سادگی و قدرت Laravel سود ببرند، اما با از دست دادن برخی از قابلیتهای تنظیمات و انعطافپذیری در برابر تغییراتی که برای افزایش سرعت است، مشکلی ندارند.
هدف این پروژه، میکروسرویسها یا سرویسهای کوچک است. کامپوننتهای، کوچک که معمولاً پروژه اصلی را پشتیبانی و ارتقا میدهند. میکروسرویسها کامپوننتهای جدا شده با محتوای مرتبط هستند (به این معنی که آنها رابطهای تعریفشده بین یکدیگر دارند) بنابراین در معماری میکروسرویس ممکن است چندین برنامه کوچک Lumen وجود داشته باشد که از یکدیگر پشتیبانی میکنند و احتمالاً قدرت گرفته از Laravel هستند.
مقال مرتبط: Laravel چیست؟
در اینجا فقط با ارائه یک لایه نگهداری ساده در مقابل یک سرویس خارجی کُند یا غیرقابلاعتماد شروع میکنیم. اغلب منابع داده خارجی – برای مثال API ها- نیاز به انتقال و یا ذخیره دارند. درنتیجه اغلب برنامههای کاربردی منحصربهفرد کوچک را که بین یک منبع داده و کد مصرفی قرار میگیرند، ایجاد میکنیم. معمولاً از این برنامهها برای استفاده از Laravel استفاده میشود که بسیار هم مفید است، اما کد اضافهای وجود دارد که با Laravel عرضه میشود و برای میکروسرویسها نیازی به آن نداریم چه برسد که برای یکی از این ذخیره کنندههای تک منظوره کوچک موردنیاز باشد؛ بنابراین بیایید یکی را با استفاده از Lumen بسازیم.
Caching
راهکار سادهای که ما پیشنهاد میکنیم یک لایه ذخیره است که فقط برای ردیابی تمام تماسها، ذخیره نتایج و ذخیرهسازی از حافظه پنهان استفاده میشود. بیایید آن را امتحان کنیم.
نصب Lumen
Lumen درست مانند Laravel برنامه نصب سادهای دارد. شما میتوانید از این دستور در هر جای دنیا استفاده کنید:
composer global require "laravel/lumen-installer=~1.0"
حالا شما میتوانید lumen new MyProject را اجرا کنید تا این پوشه را به همراه پروژه Lumen ایجاد کند.
cd Sites lumen new my-cache cd my-cache
حالا در قسمت نصب Lumen خودمان هستیم. میتوانید از php artisan برای دیدن دستورالعملهایی که در اختیاردارید، استفاده کنید و یا از php artisan serve برای ایجاد یک سرور وب در localhost:8000 که خدمات دهنده سایت شماست، کمک بگیرید. حالا فقط میخواهیم بهطور مستقیم همه تماسها را عبور دهیم. وقتش رسیده است اپلیکیشن را به اجرا درآوریم.
روشن کردن DotENV و façades
در Laravel، همهچیز بهسرعت اجرا میشود. این موضوع در Lumen هم صدق میکند، اما شما باید اول نگاهی به bootstrap/app.php. داشته باشید. چند گزینه وجود دارد که میتوانید در اینجا فعال کنید – آنها مانند یک کد اظهارنظر هستند که شما میتوانید آن را بهصورت بدون توضیح فعال کنید.
ازآنجاکه میخواهیم از Fasades Laravel و متغیرهای محیطی.env استفاده کنیم، این خطوط را بازنویسی میکنیم تا اینگونه به نظر برسند:
// Dotenv::load(__DIR__.'/../');
و این:
// $app->withFacades();
شما میتوانید از طریق اسکرول این فایل، حرکت کنید و مکانهایی را مشاهده کنید که میتوانید نرمافزار Eloquent، مسیر و میانافزار جهانی و ارائهدهندگان خدمات را به اجرا درآورید.
گرفتن تمام مسیرها
در این مرحله بیایید به app/Http/routes.php برویم. توجه داشته باشید که مسیرها در Lumen از nikic / FastRoute بهجای Illuminate Router استفاده میکنند، بنابراین همهچیز کمی متفاوت خواهد بود.
بیایید یک مسیر برای ضبط هر مسیری که از طریق آن عبور میکنیم ایجاد کنیم.
$app->get('{path:.*}', function($path) { echo 'You just visited my site dot com slash ' . $path; });
اگر با لاراول آشنا هستید، ممکن است متوجه شوید که مسیر بالا در Laravel باید بهصورت زیر باشد:
$router->get('{path?}', function($path) { echo 'You just visited my site dot com slash ' . $path; })->where('path', '.*');
اما اساساً ما هر مسیر را بررسی میکنیم و آن را بهعنوان متغیر $path میگذاریم.
مقال مرتبط: فریمورکهای برتر php در سال ٢٠١٩
عبور
اکنون میتوانیم تماسگیرنده API را تنظیم کنیم. اگر شما به تماسگیرنده API اهمیتی نمیدهید – لازم نیست که این مثال را مطالعه کنید و میتوانید از دو پاراگراف بعدی هم بگذرید.
توجه داشته باشید که من از کلاس PassThrough عمومی استفاده میکنم که با یک URL پایه ساختهشده است (بهعنوانمثال (http://api.mysite.com/v1/ و دارای روش getResultsForPath است که مسیر را مشخص میکند (بهعنوانمثال people/145) و یک نتیجه با headers ،body و status میدهد. این عمل همانند کلاس fakeApiCaller است.
بنابراین، ما تعیین میکنیم که میخواهیم کدام هدرها برگردند و کدام نباید بازگردند؛ کدام آدرس مسیر برای API فراخوانی شود؛ و سپس در حال عبور از مسیر برای تماسگیرنده پاسخ را دریافت میکنیم و با کمککننده response از Laravel یک پاسخ روشن با پارامترهای headers، body و status میدهیم.
$app->get('{path:.*}', function ($path) use ($app) { // Configure $headersToPass = ['Content-Type', 'X-Pagination']; $rootUrl = 'http://www.google.com/'; // Run $passThrough = $app->make('App\PassThrough', [$rootUrl]); $result = $passThrough->getResultsForPath($path); // Return return response( $result['body'], $result['status'], array_only( $result['headers'], $headersToPass ) ); });
توجه داشته باشید که ما در حال گذر از مثال $ app هستیم و میتوانیم برای حل موارد موجود از محفظه IOC یا هر چیز دیگری استفاده کنیم.
ذخیرهسازی
در آخر بیایید نتایج را ذخیره کنیم و به پایان برسانیم.
$app->get('{path:.*}', function ($path) use ($app) { // Configure $cacheTtl = 60; $headersToPass = ['Content-Type', 'X-Pagination']; $rootUrl = 'http://www.google.com/'; // Run $result = Cache::remember( $path, $cacheTtl, function() use ($path, $app, $rootUrl) { $passThrough = $app->make('App\PassThrough', [$rootUrl]); return $passThrough->getResultsForPath($path); } ); // Return return response( $result['body'], $result['status'], array_only( $result['headers'], $headersToPass ) ); });
اکنون سازوکار ذخیرهسازی سریع برای همه سایتها داریم. کلاس PassThrough خود را ایجاد کنید، از Guzzle برای ساختن و فراخوانی مسیر استفاده کنید و سپس پاسخ Guzzle را به شکل مورد انتظار تقسیم کنید.
ایدههای دیگر
واضح است که این مورد کاربردی و البته بسیار ساده است. Lumen در سرویسهای کوچک مورداستفاده قرار میگیرد، بنابراین احتمال بیشتری وجود دارد که از آن برای استفاده در یکی از بخشهای پرکاربرد از اپلیکیشنهایتان بهره ببرید. این بخش ممکن است تبدیل به سرور API شما شود، یا منجر بهاضافه (یا حذف) از صفهای وظیفه خودتان شود. این موضوع ممکن است دادهها را از مکانهای مختلف جمعآوری کند و سپس بهصورت نرمال به کار بگیرد. اگر یک جزء واحد باشد، بهخصوص اگر ترافیک بالا هم وجود داشته باشد، ممکن است ارزشش را داشته باشد که آن را با Lumen آزمایش کنید.
نتیجهگیری
Lumen بخشی از Laravel است و برای افزایش سرعت عملکرد توسعه یافته. این پروژه با بازدیدها و Session و سایر مواردی که بهراحتی در دسترس مصرفکنندگان قرار میگیرد سروکاری ندارد؛ بلکه بهعنوان روشی سریعتر و مرتبتر برای سرویسهای کوچک بهینهسازی شده است.