- Нет проблем с передачей значений от фронтенда к бекенду и обратно:
- В C# если передать "ложь" на клиента как есть, то она доедет строкой "False"
- В питоне поля именуются не в camelCase, а через землю. В итоге в коде бекенда встречаются два типа именований полей. Грязь.
- В плюсах огромная проблема собрать JSON. А даже когда собрали, то надо проверить что всё многообразие целых чисел правильно уместилось в JavaScript int.
- Фронтендер может быстро поправить пару мест на бекенде. Если фронтендер и бекендер это разные люди, то они начинают общаться в поямом смысле на одном языке. Фулстек разработка.
- Бекенд - это место где нужно сходить во много источников (базка, другой бекенд, за файлом и т.п.), перемолоть и вренуть фронтенду. Походы за данными - асинхронная задача. Если запускать на каждого клиента по новому потоку, как это обычно делают в компилируемых языках, то эти потоки только и будут делать что ждать. NodeJS отлично справляется с обработкой асинхронных запросов в один поток (TODO: график)
- Язык запросов Mongodb на JavaScript. Удобно писать бекенд и запрос на одном языке.
- JavaScript самый популярный язык программирования (TODO: найти источник). Для работодателя - много разработчиков на рынке, для разработчика - большой выбор мест работы.
- Выбрать фреймворк. KOA, потому что проще работать с асинхронностью.
- Мидлвара авторизации. Прокидывание результата через state.
- Разделение ответственности по MVC, которое выкристаллизировалось со временем:
- контроллер: ассерты данных, отдаёт команды моделям, передаёт данные вью
- модель: варит данные, никаких проверок полей
- вью: сериалайзер, меняет формат данных от модели для потребителя
- Юнит тесты моделей + интеграционные тесты контроллеров. Базу используем живую, подкладываем рядом. Внешние источники мокаем.
- Ручка heartbeat, которая опрашивает все дочерние сервисы вашего бекенда и делает запрос в базу.
- Документация на swagger. Близко к коду, значит больше вероятность что она в актуальном состоянии. Вместо описания ответов живые запросы - "Лучше один раз увидеть, чем сто раз прочитать".
Задача: собрать двухуровневое дерево комментариев, отсортировать первый уровень по лайкам, второй уровень по времени создания. Данные для дерева получаем из внешнего источника по сети.
- Реализация на ноде. Красивый код на лодаше, но очень медленный.
- Оптимизируем реализацию на ноде. Некрасивый код, но работает в семь раз быстрее.
- Пишем решение на плюсах. Работает ещё быстрее, но время разработки и читаемость кода не радуют.
На JavaScript легко написать прототип, с которым можно жить. Это хорошее общее решение. Когда упёрлись во что-то конкретное, тогда и нужно выбирать подходящий инструмент.
QR code на репозиторий с примером бекенда, который решает задачу про комментарии. Можно использовать его как точку отсчёта для вашего бекенда.