Laravel Jetstream. Зачем?
Всем привет! В преддверии старта курса "Framework Laravel", продолжаем цикл статей про новинки в Laravel 8 от нашего эксперта и по совместительству активного участника российского сообщества Laravel — Виталия Юшкевича.
Эта статья — продолжение обзора новинок Laravel 8. Изначально задумывалось, что в этой статье будет продолжение обзора, затрагивающие преимущественно Jetstream. Но за последнее время это не сделал только ленивый.
С одной стороны, большая часть разработчиков ленивая (в хорошем смысле этого слова), с другой, "еще один обзор" много пользы не принесет. Так как последнее обновление очень горячо обсуждается в разных комьюнити (русскоязычное и за его пределами), то мне захотелось попробовать получить ответ на вопрос — почему? Давайте вместе попробуем найти ответ на этот и другие вопросы.
Laravel Jetstream — что это?
Laravel Jetsream — это современно выглядящий скелет приложения с достаточно широким набором базовых функций. Часть из них опциональны.
Примеры функциональных возможностей из коробки:
- Авторизация, включая:
- регистрацию
- восстановление пароля
- двухфакторную авторизацию
- верификацию email
- отображение списка браузерных сессий, с возможностью логаута на остальных устройствах
- Управление профилем
- данные пользователя
- управление паролем
- управление аватарками
- удаление профиля
- Управление АПИ токенами (интеграция с пакетом Laravel Sanctum), включая управление правами
- Управление командами с разными ролями
Под капотом используется пакет Fortify (для блока авторизации), выше упомянутый Sanctum. TailwindCss на frontend. И на выбор один из двух фронтенд стеков:
- Livewire — связка livewire и blade. Рекомендуется, если хочется делать реактивные веб-приложения, но не хочется уходить в дебри vueJs и современного JS.
- Inertia.js — связка фреймворка Inertia и VueJs. Этот стек напоминает работу с полноценным SPA приложением на Vuejs с сохранением роутинга на стороне Laravel.
Что это значит и почему столько шума?
Произошло качественное изменение (это определение не содержит оценочной характеристики направления этого изменения) идеологии и подхода к разработке веб-приложений.
За последние годы сформировался некоторый принятый и привычный подход к разработке, который был в изначальном релизе выкинут. В пакет UI (старый подход) добавили поддержку новой версии laravel после большой волны негодования со стороны сообщества, но осадочек остался. И приписка о нежелательном использовании, которая была также смягчена под тем же самым давлением негодования сообщества.
Taylor (основной maintainer Laravel) сделал ставку на не самые популярные фреймворки и технологии, но близкие к его взглядам (TailwindCss и Livewire, например, часто упоминались в разработках его коммерческих сервисов).
С точки зрения новичка, безусловно, возросла точка входа во фреймворк.
Я бы сказал больше — эта точка входа изменилась и стала другой.
Стоит отметить, что после выхода 8 версии фреймворка прошло более 3 недель и риторика несколько изменилась. Желание идти на встречу Тейлора (тут должна быть звездачка для примечания), некоторые произведенные уступки сообществу.
Так, например, после релиза Laravel 8 по сети разошелся пост от Ross Wintle с критикой (ссылка на этот пост, в том числе, была на хабре). 6 Октября вышел апдейт поста, в котором были сглажены многие углы — https://rosswintle.uk/2020/09/laravel-8-jetstream-and-learning-laravel/
Также было достаточно активное обсуждение на reddit. 5 октября Taylor провел почти часовой стрим, где объяснял свою позицию, рассказывал, почему это хорошо и отвечал на другие вопросы, связанные с Jetstream.
Зачем?
Ответ на этот вопрос одновременно прост и сложен. И при этом у каждого может быть своим
Тейлор достаточно самодостаточен в выборе вектора развития своего детища (тут тоже без количественной оценки плохо это или хорошо). Он выбирает инструменты, которые нравятся ему, и готов легко выпилить то, что ему не нравится, не спрашивая мнения у сообщества. Но все же он пытается подходить ответственно к принимаемым решениям и слушать сообщество, даже если это происходит "после" и происходит некоторый откат. Окажется ли Тейлор прав и "новатором" в выбранном векторе развития фреймворка — сейчас сложно сказать, на этот вопрос даст однозначный ответ только время.
Я нахожу в этом релизе определенный знак по движению фреймворка в его некоторую специализацию. Laravel становится более ярко выраженным "фреймворком веб-разработчика", который позволяет за минимальное количество написанных строк кода и времени создать прототип веб-сайта, веб-приложения или даже SAAS сервиса. В Ларавел также сохраняются инструменты для быстрого создания API для SPA, мобильных приложений. Ларавел действительно позволяет это сделать быстро и по-своему элегантно.
Тейлор создал ряд коммерческих продуктов, которые держат нагрузку и работают достаточно быстро. Поэтому ответ "можно ли создать на Laravel нагруженное приложение" имеет наглядные ответы.
С другой стороны, проблемы Laravel некуда не уходят. Стало еще больше магии, трейтов, фасадов. Все это не лучшим образом сказывается на производительности и потребляемых ресурсов. Вопрос является ли Laravel отличным выбором для разработки высоконагруженного сервиса уже не является таким однозначным. Как минимум, разработка такого сервиса потребует более глубоких знаний фреймворка и решения ряда задач способами, не описанными в документации (а порой — существенно различающимися).
Остается ли Laravel "в игре"? — безусловно да!
Этот релиз мне показался скорее наступлением на рынок CMS с обилием проектов на WordPress. Laravel действительно есть что предложить "этому рынку".