За обновлениями можно следить в telegram-канале https://t.me/quasiart

Преамбула

Наверняка каждый веб-разработчик начинал свой путь с HTML/CSS и JavaScript. По крайней мере, эти технологии точно встречались на пути, даже у лютых бэкендеров, не снисходящих с небес до каких-то браузрных свистелок.

И так сложилось до 2010-2015, что JavaScript считался языком для создания анимированных снежинок на сайтах, форм обратной связи и веб-интерфейсов.

Я и сам придерживался мнения, что на бэкенде должны быть более подходящие технологии, но никак не JavaScript. Когда я спросил у фронтового тимлида на одной из предыдущих работ, зачем оно на сервере, всё, что мне ответили, это «ну, можно переиспользовать код на клиенте и на сервере». Также мне говорили, что один язык на сервере и клиенте может упростить поиск разработчиков, мол, даже джаваскриптер сможет писать бэк. Но это неверное предположение, так как знание языка — это не одно и то же, что подход к разработке, а для фронта и бэка он требуется разный. Каких-либо веских аргументов или примеров грамотного переиспользования я не услышал, поэтому остался при своём мнении. Тем более, что я тогда на пару лет ушёл чисто во фронтенд.

Начало

Понимание пришло в то же время, когда год назад я пришёл на новое место работы в качестве фулстэка. Новый проект был полностью на JavaScript: и фронт, и бэк. Правильнее даже сказать, что TypeScript, так как это важное уточнение. Презрение быстро сменилось прозрением: JavaScript на сервере — это круто, а теперь о преимуществах.

1 Общие интерфейсы, типы, перечисления и пр.

Очевидно, что на фронте и бэке часто крутятся одни и те же сущности, например, юзеры, заказы, отчёты, файлы, акции и пр. И чтобы фронт и бэк имели одинаковое представление об этих сущностях, можно создать для них общие интерфейсы. Так, при сборке фронта или бэка, мы узнаем, правильно ли мы используем сущность: все ли используемые поля есть, все ли обязательные поля указаны, не записываем ли мы что-то лишнее в объект и т. д.​

2 Общий код

Об этом очевидном преимуществе мне рассказали ещё 3 года назад. Мы используем некоторые сторонние библиотеки и на фронте, и на бэке, например, moment и lodash. Но конкретно в нашем коде это преимущество используется редко: валидация, строковые операции ипрочие мелкие утилиты.

3 Хорошо для фуллстэков

Так вышло, что наша команда состоит исключительно из фуллстэков. Это значит, что у нас нет отдельных команд для фронта или для бэка, мы все одна продуктовая команда, занимающаяся реализацией историй от начала и до конца. Поэтому синхронизация между фронтом и бэком максимальная, и нет такого, что фронтовая команда считает ворон, пока бэк пилит API.

Поэтому проект на одном языке отлично накладывается на такую структуру команды.

Вывод

Делать бэк на JavaScript — это, конечно же, решение сугубо индивидуальное для каждого проекта, но оно достойно обсуждения.