Metody oddzielania frontu i zaplecza za pomocą pełnego javascript?


31

Załóżmy, że mam interfejs, który jest w większości jednostronicową aplikacją napisaną za pomocą kątownika, pomruku i altany. Przypuśćmy, że mam backend, który jest w większości po prostu interfejsem API REST umieszczonym na ORM, który przechowuje / pobiera obiekty z bazy danych, używając takich funkcji, jak chrząknięcie, ekspresowe i sekwencjonowanie.

Aplikacja kątowa wykonuje wszystkie wizualne rzeczy, które widzi użytkownik, ale robi to, będąc graficznym interfejsem użytkownika w stosunku do usług świadczonych przez back-end.

Pożądane byłoby podzielenie ich na dwie różne bazy kodowe, aby umożliwić niezależny rozwój, wersjonowanie, ciągłą integrację, usprawnianie itp.

Moje pytanie brzmi: jakie są dostępne metody robienia tego w czysty sposób? Czy są zalecane najlepsze praktyki dotyczące javascript z pełnym stosem?

Opcja nr 1 wydaje się być monolitem, tzn. „Nie rozdzielaj ich”. Zaletą jest to, że łańcuch kompilacji jest prosty i wszystko jest w jednym miejscu - ale wydaje się, że istnieje wiele wad; trudniejsza do samodzielnej wersji, zepsuty przód oznacza nierozkładalny tył i tak dalej.

Opcja nr 2 wydaje się quasi-monolitem, w którym łańcuch kompilacji frontonu powoduje zapisanie kilku plików na zapleczu. distKatalog na front-end będzie odnosić się do jakiegoś katalogu na back-end, więc zasadniczo, gdy przednie minifies końcowe, uglifies, etc, to kończy się publikowania na back-end, czyli wszystko.

Opcja nr 3 wydaje się być całkowicie oddzielna: front-end i back-end uruchamiają własne serwery na różnych portach i są to w pełni osobne projekty. Wadą wydaje się, że muszą być skonfigurowane tak, aby wiedzieć o swoich portach; back-end musi zezwalać na CORS z frontonu, a front-end musi wiedzieć, gdzie powinny się znajdować wszystkie te punkty końcowe.

Opcją # 4 może być użycie czegoś w rodzaju dokowania-komponowania, aby połączyć całość.

Jestem pewien, że istnieją inne opcje. Jaka jest zalecana najlepsza praktyka?

Odpowiedzi:


18

Jest to aplikacja typu front-end, z interfejsem REST pomiędzy nimi. Masz już pełną separację.

Głosuję za opcją nr 3. Wygląda na to, że martwisz się konfiguracją, ale o to w tym wszystkim chodzi. Konfiguracja pozwala na pełną separację bez konieczności ścisłego powiązania kodu. Jeśli martwisz się o CORS, umieść wszystko w jednej domenie. Jeśli musisz mieć CORS, najlepszym sposobem na zarządzanie jest konfiguracja.

Ale tutaj nie ma „najlepszych praktyk”. Najlepszą praktyką jest ta, która najlepiej spełni twoje konkretne potrzeby.


2
Jak umieściłbyś wszystko w jednej domenie, gdyby były to dwa osobne serwery? Nawet gdyby działały na tym samym hoście, musiałyby znajdować się w różnych portach, co czyni je innym źródłem.
FrobberOfBits,

1
Jeśli nie ma najlepszej praktyki, czy są dostępne przykłady wykonania tej konfiguracji?
FrobberOfBits,

7
Możesz umieścić odwrotny serwer proxy (nginx) przed aplikacją i zamontować /lokalizację na localhost:3000(serwer frontonu) i /api/na localhost:3001(serwer interfejsu API). nginx będzie wtedy nasłuchiwał na domyślnym porcie http.
nvartolomei

@nvartolomei Zgadzam się na używanie odwrotnego proxy. Czy istnieje sposób na czyste udostępnianie niektórych informacji między zapleczem, interfejsem użytkownika, takich jak informacje o trasach? Czy łatwo jest skierować zwrotny serwer proxy do CDN?
Andrew Allbright,

6

Tak, należy je rozdzielić i traktować aplikację frontonu jak aplikację innej firmy - możesz w końcu dodać kolejnego klienta, na przykład aplikację mobilną, a jeśli pierwszy klient został zbudowany w ten sposób, Twoje życie będzie łatwiejsze.

Korzystanie z kontenerów dokowanych lub innego systemu wdrażania dotyczy głównie zaplecza, ponieważ interfejs użytkownika to tylko zasoby statyczne, które należy rozwiązać. Możesz hostować te zasoby statycznie na swoim serwerze lub w innym miejscu, takim jak CDN, takim jak cloudfront.

Unikanie corsów pozwoli ci zaoszczędzić trochę konfiguracji, ale jak wspomniano powyżej, jest to w pewnym sensie kwestia. Korzystanie z cors (i uwierzytelniania tokena) lepiej przygotuje backend również dla innych klientów.

Edycja: jeśli chodzi o najlepsze praktyki js pełnego stosu - powiedziałbym to, bądź konsekwentny. Jeśli używasz obietnic (i powinieneś), rób to po obu stronach. Zachowaj ten sam styl i formatowanie js, używaj tych samych bibliotek testowych (jeśli to możliwe) itp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.