Pracuję nad projektem w MVC, który ma aplikację mobilną, więc jedno jest jasne, że musimy użyć interfejsu API sieci Web, aby można go było używać w aplikacji mobilnej.
Po utworzeniu interfejsu API, gdy zaczęliśmy opracowywać witrynę sieci Web, jesteśmy zdezorientowani i rozmawialiśmy o tym, czy użyć interfejsu API, czy bezpośrednio uzyskać dostęp do obiektu biznesowego. Skończyło się na tym, że mieliśmy bardziej doświadczonego programistę opiniotwórczego do korzystania z interfejsu API sieci Web zamiast bezpośredniego używania obiektu biznesowego.
Mam wątpliwości co do tej struktury rozwiązania.
1) Dlaczego powinniśmy korzystać z interfejsu API sieci Web i składać żądania HTTP (co jest czasochłonne), aby uzyskać lub umieścić dane zamiast obiektu biznesowego bezpośrednio w tym samym rozwiązaniu.
2) Po argumentach powiedzieli, co jeśli klient chce hostować API i Internet na innym serwerze w chmurze i stosować skalowanie tylko na API lub może chcieć mieć inny adres URL do uzyskiwania dostępu do API i Web (co jest logiczne). Czy w takim przypadku powinniśmy wywołać Web API z aplikacji MVC w tym samym rozwiązaniu?
3) Jeśli hostujemy API i Internet na innym hostingu, oznacza to, że nasza Sieć będzie używać WebClient i będzie nawiązywać połączenia HTTP na każdej nawigacji. Czy to jest poprawne?
4) Jeśli obiekt biznesowy zostanie utworzony zarówno z interfejsu API, jak i hostingu na innym serwerze, to jeśli coś zmieni się w BL, będzie trzeba zaktualizować kompilację na obu serwerach.
5) Lub powinniśmy stworzyć tylko jeden projekt dla API i możemy dodawać widoki lub strony HTML w celu opracowania interfejsu WWW, aby w ten sposób można było wywoływać API bezpośrednio z ajax.
Zgodnie z moją wiedzą # 5 jest najlepszym rozwiązaniem lub API służy tylko do dostępu stron trzecich. Jeśli mamy DB, EF, warstwę danych i warstwę biznesową w tym samym rozwiązaniu, nie powinniśmy używać interfejsu API do wykonywania połączeń HTTP i bezpośredniego dostępu do obiektu biznesowego. (popraw mnie, jeśli się mylę) API jest potrzebne, gdy aplikacja mobilna lub komputer stacjonarny lub ktoś chce uzyskać dostęp do aplikacji, abyśmy mogli mieć to samo repozytorium i warstwę danych.
W moim scenariuszu muszę utworzyć interfejs API, ponieważ mamy również aplikację mobilną, a po stronie interfejsu API projektu nazwaliśmy warstwę biznesową (oddzielny projekt), a warstwa biznesowa komunikuje się z warstwą dostępu do danych (oddzielny projekt). Więc moje pytanie brzmi: czy hostujemy nasz interfejs API i sieć na różnych serwerach, wówczas wywołanie interfejsu API będącego żądaniem HTTP może potrwać dłużej niż używanie metody z warstwy biznesowej podczas tworzenia projektu i mamy .dll warstwy biznesowej. W kontrolerze API po prostu przekształcamy put naszej firmy na format json.
Szukałem w Internecie, ale nie uzyskałem przekonującej odpowiedzi. Znalazłem blog http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx omawiający ten sam punkt, ale znowu na tym blogu mam pytanie, dlaczego musimy rozważyć scenariusz nr 3?
Aktualizacja: Możemy mieć inny projekt API i projekt MVC i możemy wywoływać API z sieci za pomocą jvascript lub możemy użyć wzorca MVVM.