Я працюю над проектом у MVC, який має мобільний додаток, так що одне зрозуміло, що ми маємо використовувати Web API, щоб він міг використовуватися в мобільному додатку.
Після створення API, коли ми почали розробляти веб-сайт, ми розгубилися та обговорили, чи використовувати API чи безпосередньо мати доступ до бізнес-об’єкта. І ми закінчилися після формування думки більш досвідченого розробника, щоб споживати веб-API, а не використовувати бізнес-об’єкт безпосередньо.
У мене виникає плутанина щодо цієї структури рішення.
1) Чому ми повинні використовувати веб-API і робити HTTP-запит (що займає багато часу), щоб отримати або поставити дані замість бізнес-об’єкта безпосередньо, що знаходиться в тому ж самому рішенні.
2) Після аргументів вони сказали, що робити, якщо клієнт хоче розмістити API та веб-сайти на різних хмарних серверах і застосувати масштабування лише на API, або він може мати різний URL для доступу до API та Web (що є певним, що є логічним). Тож у такому разі ми повинні викликати Web API з MVC-програми у тому ж рішенні?
3) Якщо ми розміщуємо API та Web на різних хостингах, то це означає, що наша Web використовуватиме WebClient та здійснюватиме виклик HTTP на кожній навігації. Це правильно?
4) Якщо бізнес-об’єкти формують і API, і веб-хостинг на іншому сервері, тоді, якщо щось зміниться в BL, потрібно буде оновити збірку на обох серверах.
5) Або ми повинні створити лише один проект для API і можемо додати перегляди або html-сторінки для розробки веб-інтерфейсу, щоб таким чином ми могли безпосередньо викликати API з ajax.
Згідно з моїми знаннями, №5 - найкраще рішення, або API - це лише доступ для сторонніх розробників. Якщо у нас є DB, EF, рівень даних та бізнес-рівень в одному і тому ж рішенні, тоді ми не повинні використовувати API для здійснення HTTP-дзвінків та прямого доступу до бізнес-об’єкта. (виправте мене, якщо я помиляюся) API потрібен, коли мобільний додаток або настільний ПК або хтось із них хоче отримати доступ до програми, щоб ми могли мати той самий сховище та рівень даних.
У моєму сценарії я повинен створити API, оскільки у нас також є мобільний додаток, і на стороні API проекту ми назвали бізнес-рівень (окремий проект), а бізнес-рівень спілкується з рівнем доступу до даних (окремий проект). Отже, моє питання полягає в тому, якщо ми розміщуємо наш API та Інтернет на різних серверах, тоді виклик API, який є HTTP-запитом, може зайняти більше часу, ніж використання методу з бізнес-рівня, коли ми створюємо проект, і у нас є .dll бізнес-рівня. У контролері API ми просто перетворюємо наш бізнес у формат json.
Я шукав в Інтернеті, але не отримав переконливої відповіді. Я знайшов блог http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx, який обговорював ту саму точку, але знову в цьому блозі моє питання, чому нам потрібно розглянути сценарій №3?
Оновлення: У нас може бути різний проект API та MVC-проект, і ми можемо викликати API з Інтернету за допомогою jvascript або використовувати MVVM-шаблон.