alexfedoseev
@alexfedoseev
React & Rails Dev

Как организовать поток запросов к JSON API через Node.js + Express + React приложение?

Есть изоморфное React-приложение, которое крутится на Node.js + Express сервере. Данные забираются/отдаются через JSON API на Rails.

Хочу послушать мнения каким образом лучше организовать поток запросов к API.

Вариант #1

5873bce3032b42abbd62b413e5c6045d.png

Первый запрос от клиента уходит на Node.js сервер (1-2), который делает http-запрос с сервера к Rails API (3). Получает от него данные (4). React рендерит html и отправляет его клиенту (5-6). Далее клиент уже делает ajax-запросы напрямую к API (7-8).

В этом варианте API-серверу придется принимать CORS-запросы.

Вариант #2

65e748a51318412b9babac4215787b55.png

К Node.js/Express добавляется прослойка, которая принимает все запросы на локальный адрес /api (3) и проксирует их на API (4). Соответственно все запросы (в том числе и ajax с клиента) принимает Express, который делает серверный запрос к API. Таким образом убиваем CORS, но удлиняем цепочку.

С точки зрения безопасности вариант #2 предпочтительнее. Но как он с других точек зрения по сравнению с вариантом #1?

UPDATE
Вот тут описано как: @medium
Вот тут pet-production по описанной схеме: alexfedoseev.com
  • Вопрос задан
  • 2285 просмотров
Решения вопроса 1
@iShatokhin
JS developer
Третий вариант: фронтендом на сервере ставится nginx, и он проксирует запросы к Node (для рендера) и к Rails (для ajax на "/api"). Таким образом не нужны CORS запросы, для клиента это будет выглядеть как единый сервер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@roman01la
Я бы посмотрел на это так: Node.js сервер занимается исключительно React приложением, Rails сервер — API. Возложив ответственность за API на Node.js сервер добавляет сложности в архитектуру и большую нагрузку на сервер рендеринга приложения, имхо, конечно.

То есть, первый вариант предпочтительнее. Тем более, когда Rails сервер — единственный источник API, то проще контролировать возможные будущие клиенты (больше приложений скажем).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект