2016-08-18 22 views
6

Jestem świadomy różnicy między WEB API i MVC. Jestem również świadomy, że w asp.net core 1.0 istnieje tylko jeden typ kontrolera, który obsługuje zarówno MVC i API.Kiedy używać kontrolera API kontra kontrolera MVC

Jednak ostatnio oglądałem wiele tutoriali ASP.NET MVC i zauważyłem, że instruktor tworzy folder Api wewnątrz folderu Controllers.

W ten sposób dzieli wszystkie kontrolery MVC, które przede wszystkim obsługują ViewModels i używają funkcji View, aby poinformować MVC, który widok wyświetlać z kontrolerów API, które dotyczą przede wszystkim Dtos i wydają się ściśle traktować dane, a nie widoki .

Myślisz, że w aplikacji MVC nie byłoby żadnych kontrolerów API, prawda? Zwłaszcza, że ​​w rdzeniu 1.0 dziedziczysz z jednej klasy: "kontroler". Ale domyślam się, że po włączeniu frameworków front end, takich jak Angular i Kendo UI, które wykonują wiele żądań ajaxowych, zazwyczaj chcesz je wykonywać za pomocą api.

Oto mój obecny zrozumienie:
Za pomocą kontrolera MVC ściśle do MVC tylko funkcje, takie jak precyzujące, które powinny być wyświetlane i przechodzące model widok wraz z nim widok.

Użyj kontrolera API głównie do wywołań ajaxowych, nigdy do początkowego ładowania widoku, a nigdy do wzorców CRUD MVC.

Czy ktoś może zapewnić mi lepsze standardy, jeśli chodzi o to?

+2

Teraz możesz dowolnie mieszać akcje MVC i API w tym samym kontrolerze, w dużej mierze to tylko kwestia opinii lub decyzji projektowej. Oddzielenie kontrolerów MVC, które dostarczają prezentacji od kontrolerów API, które dostarczają dane, brzmi dla mnie jak decyzja "separacja problemów". To naprawdę zależy od ciebie, jak chcesz uporządkować rzeczy. – jmoerdyk

Odpowiedz

7

Jak zauważyłeś, nie ma żadnej różnicy w .NET Core między tymi dwoma elementami, a utworzenie folderu "API" byłoby wyłącznie organizacją projektu, ale kontrolery byłyby tego samego typu.

Jeśli chcesz dość prostą regułę, powiedziałbym, że każda metoda zwracająca JSON/XML/dane (bez informacji o prezentacji) powinna być kontrolerem "API", a wszystko co zwraca HTML powinno być "MVC" kontroler, czy nie w folderze API.