Продолжаю изучать In Depth Laravel, проект URL Shortener
31.01.2021
После завершения второго проекта курса курса, я перешёл к просмотру теоретической части по следующему проекту и столкнулся с дилеммой, о которой расскажу ниже.
Следующий проект курса - URL Shortener, аналог bit.ly для сокращения любых ссылок и приведения их к короткому виду.
Принцип работы:
Длинная ссылка, например, на мою предыдущую публикацию - https://poymanov.ru/blog/intro-in-depth-laravel
Может превратиться в короткую, перейдя на которую, можно попасть на мой сайт - http://bit.ly/3cEqFQ7
При этом, эту ссылку удобно разместить в Twitter и можно даже продиктовать по буквам, в телефоном разговоре.
Предлагаемый функционал приложения:
- Пользователь может зарегистрироваться;
- Пользователь может авторизоваться;
- Пользователь может сбросить пароль и установить новый;
- Авторизованный пользователь может создать сокращённую ссылку;
- Авторизованный пользователь может удалить сокращённую ссылку;
- Авторизованный пользователь видит статистику переходов по своей сокращённой ссылке;
- Авторизованный пользователь видит список всех своих сокращённых ссылок и может перемешаться по нему с помощью пагинации;
- Любой пользователь может перейти по сокращённой ссылке и будет переадресован на оригинальный (тот, который надо было укоротить) адрес.
Автор курса предлагает сделать приложение в виде SPA, с использованием Laravel и VueJs.
Я отчётливо понимаю, что цель курса в принципе познакомить участников с существующими инструментами, но этот проект что-то вообще сделан очень «некрасиво».
Что смущает:
- Автор создал монолит. Т.е. изначально все работает на Laravel, с некоторыми вкраплениями VueJs. Например, перемешаны между собой роутинги и Laravel, и VueJs. Часть адресов отзывается на backend, а часть срабатывает по Vue Router;
- Для авторизации используются куки на стороне Laravel, состояние авторизации и данные пользователя передаются на frontend через глобальный js-объект window.
- Для работы авторизации из пункта выше, все api-методы перенесены в web-пространство роутера Laravel;
- Полностью отсутствуют тесты.
Как хотелось бы сделать в идеале:
- Frontend и Backend разные приложения;
- Авторизация на Frontend с помощью JWT и хранением состояния в state;
- Тесты, как минимум на Backend.
В целом, требуется вынести всю логику в микросервис и сделать «тонкий» и независимый frontend, который будет по-настоящему работать с API.
Вышеобозначенная дилемма в том, что тут надо либо повторять плохие решения автора, либо погружаться во frontend и делать хорошо.
Первое мне не позволит сделать мой перфекционизм, я не готов помещать подобную работу в своё портфолио и показывать другим людям изначально некачественную разработку.
Второй вариант более идеален, но на данный момент я не хочу сильно погружаться во frontend и VueJs, не очень верю в fullstack (считаю, что каждый должен качественно делать только узкую часть задач, в которой он особенно преуспел), и в дальнейшем хочу более глубоко погрузиться в backend-технологии. У меня уже была попытка сделать приложение на React, результатами которой я не очень остался доволен.
Итог - реализацию этого проекта я оставляю до лучших времён, когда захочется больше разобраться с VueJs.
По курсу ещё осталась пара приложений, и возможно их всё-таки получится сделать хорошо и добавить в своё портфолио.
Об авторе
Пойманов Николай
PHP-разработчик