Продолжаю изучать 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-разработчик