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
  • Вопрос задан
  • 1703 просмотра
Решения вопроса 1
@iShatokhin
JS developer
Третий вариант: фронтендом на сервере ставится nginx, и он проксирует запросы к Node (для рендера) и к Rails (для ajax на "/api"). Таким образом не нужны CORS запросы, для клиента это будет выглядеть как единый сервер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
roman01la
@roman01la
JavaScript web developer
Я бы посмотрел на это так: Node.js сервер занимается исключительно React приложением, Rails сервер — API. Возложив ответственность за API на Node.js сервер добавляет сложности в архитектуру и большую нагрузку на сервер рендеринга приложения, имхо, конечно.

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

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

Войти через TM ID
Похожие вопросы