Bjornsen
@Bjornsen
Happy coder

Как фронтенд получает данные от бэкенда при их разделении?

Появилась потребность в написании веб-приложения, в котором фронтенд будет разделен с бэкендом - разные репозитории, разные деплои и все разное. И так как раньше я писал только монолитные приложения, где бэкенд соседствовал с фронтом, а в гугле подробных для меня описаний их разделения и взаимодействия я не нашел, то у меня осталось несколько белых пятен, которые хотелось бы заполнить, а именно:
1. Как я понял, при полном разделении бэка и фронта они деплоятся раздельно. В случае с бэкендом понятно, поднимается сервер, бд, пишутся хендлеры и тд и тп. Бэкенд выступает в качестве апишки. Но что у нас получается с фронтом? В некоторых статьях видел, что для фронта на серваке запускается nodejs, но зачем она нужна запущенная, если мы можем просто вернуть index.html, а браузер уже подтянет всякие js фреймворки и прочий обвес, который подключается в хтмл? Тогда получается, что для фронта нам вообще ничего не надо кроме как закинуть статику в определенную папочку и сказать nginx'у, который стоит перед веб приложением, возвращать по запросу пользователя всю эту статику? Отсюда вытекает второй вопрос
2. Если юзер вбивает в браузер адрес и жмет энтер, то запрос идет к этому самому nginx, он отдает статику, жс скрипты запускаются и шлют запрос на получение данных к бэку, так? Но ведь в таком случае у нас получается 2 запроса - один для получения фронтовых файлов, а второй уже от самого фронта к бэку, это норм? Или можно как то за один запрос определить, что нужно получить и от бэка и от фронта и сразу вернуть все пользователю?
3. Если я все еще правильно рассуждаю, то используя докер, нужен контейнер для бэка, контейнер для nginx, а для фронта ничего, ведь как я уже написал, там достаточно только статики в определенной папке, так?
  • Вопрос задан
  • 552 просмотра
Решения вопроса 2
wapster92
@wapster92
1. Нода не нужна, если это не SSR.
2. У тебя в любом случае много запросов, если даже просто статику запрашивать (шрифты, картинки, стили, скрипты). Чтобы получать "всё" нужно использовать серверный рендеринг.
3. Только указать nginx откуда брать файлы для фронта
Ответ написан
Комментировать
@deliro
nodejs, но зачем она нужна запущенная

Для SSR, если он нужен.

2 запроса - один для получения фронтовых файлов, а второй уже от самого фронта к бэку, это норм?

Норм. Отдавая index.html глупым nginx'ом (без логики) ты не то чтобы способен понять, что нужно будет отдать пользователю. Может он пришёл на страницу /, а может на страницу /buy, а может на /profile/me. Может он залогинен, а может и нет. Может он вообще админ.

Если я все еще правильно рассуждаю, то используя докер, нужен контейнер для бэка, контейнер для nginx, а для фронта ничего, ведь как я уже написал, там достаточно только статики в определенной папке, так?

Так, если нет SSR. Если SSR нужен, то ещё контейнер с нодой. При этом, вовсе не обязательно статику раздавать именно nginx'ом. У меня в некоторых проектах nginx (точнее, Caddy, но не суть) просто занимается шифрованием и вообще все запросы проксирует в бэкенд, а бэкенд раздаёт статику. Но там бэк на Golang написан, а при компиляции статика фронта целиком встраивается в бинарник, могу себе позволить. На условном питоне я бы так не стал делать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы