Rails API + Node Frontend?

Witam,

mam pytanie odnośnie rozdzielenia aplikacji (typowe MVC) opartej na Railsach na dwie odseparowane aplikacje (API i Frontend).

Czy jest to dobry pomysł by zamiast typowego railsowego MVC zostawić tylko API a po drugiej stronie postawić aplikacje opartą o NodeJS (tu konkretnie react js)?
Jakie są plusy i minusy takiego rozwiązania?

Oczywiście, że to świetne rozwiązanie.

hmm, a jakieś uzasadnienie (tzn czemu jest to lepsze niż zwykła aplikacja MVC, plusy / minusy takiego rozwiązania)?

Wg mnie Railsy na same API są za ciężkie. My mamy API w rodzie i ROMie. Jeśli jednak nie chcesz skorzystać z ROMa, to możesz użyć Sequela z którego to rom-sql korzysta.

Jako iż aktualnie realizuje podobny projekt (Rails API, interface Angular) mogę się trochę wypowiedzieć. Rails jest trochę nie wygodny do pracy z Angularem, musiałem dograć parę modułów do Angulara i parę gemów, aby w pełni obsługiwać csrf, oraz pokazywać widoki. Nie wiem czy robię dobrze, ale całą aplikacje pisze w katalogu assets/javascript (inne wyjście jakie jeszcze widzę to katalog public, ale mogę się mylić). Natomiast jest mnóstwo modułów obsługujących np. devise co strasznie ułatwia i jest przyjemniejsze do realizacji.

Ze swojej strony również polecam rozwiązanie Rails API + frontend. Być może Railsy faktycznie są nieco za ciężkie na API, ale zawsze można użyć “odchudzonej” wersji https://github.com/rails-api/rails-api . W moim projekcie po stronie frontendu mam React’owe SPA które uruchamiane jest przez Webpack do developmentu (bardzo wygodne rozwiązanie), deploy polega na podmianie jednego pliku JS generowanego też przez Webpack’a. Fajne jest też to że poprawki we froncie (których było sporo) wykonywane były nawet bez restartu Railsów wystarczyło dodanie kolejnej wersji pliku JS z hashtagiem i zmiana tego w index.html (pewnie dałoby się napisać jakiś krótki skrypt Grunt/Gulp do tego). Porównując to do poprzedniej wersji apki gdzie były czyste Railsy + jQuery to jest prawdziwa rewelacja.

Jeżeli zamierzasz pisać aplikację w React to polecam przyjrzeć się projektowi Redux (React + Flux) bardzo fajnie buduje się na tym aplikacje. Ogólny opis tej koncepcji jest dosyć fajnie opisany tutaj: http://fancypixel.github.io/blog/2015/01/28/react-plus-flux-backed-by-rails-api/
W opisie są linki do działającej apki na Github.

Oczywiście jest to trochę nieaktualne, ale daje ogólne pojęcie jak zrealizować taki projekt.

Jeszcze raz polecam w przypadku tworzenia apki Reactowej skorzystać z Webpack’a i HMR (Hot Module Reload) w skrócie działa to tak że JS jest podmieniany bez przeładowania przeglądarki co niesamowicie przyspiesza pracę. Prezentacja na której jest to pokazane i opowiedziane przez twórcę: https://www.youtube.com/watch?v=xsSnOQynTHs

1 Like

Cześć,

Mam do rozgryzienia podobny temat. Chcę stworzyć front w React i backend w RoR. Apka to “typowy panel administracyjny” (kategorie, artykuły, etc).
Chcąc podejść do tematu profesjonalnie próbuję znaleźć powód dla którego miałbym to oprzeć o Redux. Nie do końca jeszcze to rozumiem, ale wydaje mi się, że do takiego panelu nie jest to rozwiązanie które coś da. Nie ma tu przecież za bardzo komponentów, których stan wpływa na stan całej aplikacji. Stąd pytanie do bardziej doświadczonych, czy jest w tym momencie sens poświęcić czas na zrozumienie Redux. Czy gdzieś to może mi się w takiej konkretnie aplikacji jak panel przydać?

Jeżeli masz do zrealizowania typowy panel administracyjny to zdecydowanie szkoda czasu na zabawę z Reactem/Redux’em. Sugeruję skorzystać z jakiegoś gotowego panelu w stylu ActiveAdmin czy RailsAdmin.