我正在MVC中具有移动应用程序的项目中工作,因此很明显,我们必须使用Web API,以便可以在移动应用程序中使用它。
在开始开发网站时创建了API之后,我们感到困惑,并讨论了是使用API还是直接访问Business对象。最后,我们让更多有经验的开发人员来使用Web API,而不是直接使用Business对象。
我对此解决方案结构感到困惑。
1)为什么我们应该使用Web API并发出HTTP请求(这很耗时)来获取或放置数据,而不是直接使用相同解决方案中的业务对象。
2)在争论之后,他们说如果客户端要在不同的云服务器上托管API和Web并仅在API上应用扩展,或者他想为访问API和Web使用不同的url(这是合理的)。因此,在那种情况下,我们应该在同一解决方案中从MVC应用程序调用Web API吗?
3)如果我们将API和Web托管在不同的托管上,那么这意味着我们的Web将使用WebClient并在每个导航上都有HTTP调用。这样对吗?
4)如果我们要在不同服务器上同时使用API和Web托管的业务对象,则BL中的某些更改将需要更新这两个服务器上的构建。
5)或者我们应该只为API创建一个项目,并且可以添加视图或html页面来开发Web界面,这样我们就可以直接从ajax调用API。
据我所知,#5是最好的解决方案,或者API仅适用于第三方访问。如果我们在同一解决方案中具有DB,EF,数据层和业务层,则我们不应使用API进行HTTP调用并直接访问业务对象。(如果我错了,请纠正我)当移动应用程序或桌面或任何人想要访问应用程序时需要API,以便我们可以拥有相同的存储库和数据层。
在我的场景中,我必须创建API,因为我们也拥有移动应用程序,在项目API方面,我们称为业务层(单独的项目),业务层与数据访问层(单独的项目)进行通信。因此,我的问题是,如果我们将API和Web托管在不同的服务器上,那么调用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项目,我们可以使用jvascript从Web调用API或使用MVVM模式。