2014-06-27 11 views
10

Mam rozwiązanie dla aplikacji mobilnych buduję - Dotychczas ten składa się z dwóch projektów:Dzielenie się projekt WebAPI i projekt FrontEnd w roztworze

1) WebAPI for API/DAL/SQL etc 
    2) Web for single-page front-end 

Projekt Web sprawia, że ​​połączenia do projektu WebAPI. Planuje się utworzenie kolejnego projektu dla aplikacji Windows 8, innego dla aplikacji WP8 itd.

To działało dobrze podczas tworzenia, ale stało się dość skomplikowane z CORS, wdrożeniami, itp. (Sieć jest serwowana od inny punkt końcowy niż WebAPI - dwie witryny Azure). Moje pytanie brzmi - kiedy projektujesz rozwiązanie wspierane przez REST-owski interfejs API, kiedy rozsądne/nierozsądne jest dzielenie rozwiązania na wiele projektów?

Odpowiedz

14

ja zawsze podzielić API i front-end do oddzielnych projektów z kilku powodów:

Front-end Zależności (jQuery, knockout, kątowe ....) sprawiają, że api cięższe niż to konieczne. Przesiewanie kodu dla typu "Inny" może spowolnić rozwój.

Kontrola źródła może stać się nieco myląca podczas realizacji dwóch funkcjonalnie oddzielnych projektów w ramach jednego projektu. Jeśli zmienisz zarówno interfejs API, jak i witrynę w ramach jednego zatwierdzenia, ale potem chcesz przywrócić jeden z nich do starszej chwili (lub promować je osobno), stanie się to problemem.

Łącząc projekty, należy zaktualizować współdzielone współdzielenia jednocześnie (zaktualizować do nowej wersji .NET?). JEŚLI twój kod interfejsu API ma zależności od zamortyzowanego kodu, uaktualnienie może być trudne, a aktualizacja witryny może zostać wstrzymana (lub odwrotnie).

Jeśli są w ramach tego samego projektu, nie można łatwo opublikować tylko interfejsu API lub interfejsu użytkownika. Normalnie API zostanie zakończone i stabilne na długo przed zakończeniem pracy z wizualnymi aspektami witryny. Nie będziesz chciał wstrzymywać się od ponownego publikowania interfejsu API za każdym razem, gdy wprowadzisz niewielką zmianę witryny.

Posiadanie obu elementów jako tego samego projektu wymagałoby uruchomienia zarówno na tym samym serwerze internetowym (jak iw tej samej puli aplikacji!). Jeśli zamierzasz korzystać z wielu źródeł interfejsu API (zwykle z punktu widzenia API), to nie chcesz, aby API uległo degradacji z powodu żądań do witryny. Dzieje się to w obie strony, jeśli twój interfejs API jest mocno uderzony, nie chcesz, aby Twoja strona przestała reagować.

Ponieważ byłyby one uruchomione w tej samej puli aplikacji, również byłyby uruchamiane jako ten sam użytkownik. Ze względów bezpieczeństwa możesz chcieć, aby pula aplikacji API działała jako oddzielne konto usługi, które ma zintegrowany autowy dostęp do źródła danych. Następnie możesz zablokować konto użytkownika strony internetowej i uniemożliwić dostęp do zasobów zewnętrznych.

Ponieważ szablon webapi MVC zapewnia wszystkie zależności i konfiguracje dla interfejsu użytkownika, logiczne może być ich łączenie, ale tylko dlatego, że ułatwiły to, nie oznacza, że ​​powinno to być zrobione w ten sposób. Zwykle usuwam front-end udostępniony w tym szablonie i przekształcam go w prostą stronę opisującą sposób korzystania z interfejsu API.

W końcu sama MVC koncentruje się na oddzieleniu obaw i czystym rozwoju. Powiedziałbym, że oddzielenie typów projektów jest zgodne z tą logiką.

+0

Dzięki za to. Więc przypuszczam, że ból głowy z różnych punktów końcowych zarówno hostowanych, jak i lokalnych (localhost: 2020 i localhost: 2021) i CORS jest warte oddzielenia obaw, według ciebie? – SB2055

+0

Tak, absolutnie. W miarę wzrostu projektu separacja szybko się opłaci. Dodatkowo, z różnymi punktami końcowymi, twoi konsumenci mogą wybrać, aby przejść bezpośrednio do tego, co chcą (API lub Front-end) bez znajomości drugiego punktu końcowego. – vesuvious

+0

Ponadto, mimo że CORS zawsze jest bólem głowy, pisanie handler'a w webapi jest całkiem proste. Istnieje mnóstwo dokumentacji online do pisania programów obsługi CORS, które umożliwiają określenie dostępu dla niektórych hostów, wszystkich hostów itp. – vesuvious

0

Nie mogę wymyślić technicznego powodu, aby podzielić rozwiązanie Visual Studio na rozwiązanie "klienta" i "usługi". Jednak w mojej obecnej pracy podzieliliśmy nasze rozwiązanie na dwa, ponieważ były to dwa osobne zespoły pracujące nad wymaganiami. Tak więc była to decyzja czysto organizacyjna dla nas.