Asp.net mvc 4 我们应该在同一个解决方案中从MVC应用程序调用Web API吗?

Asp.net mvc 4 我们应该在同一个解决方案中从MVC应用程序调用Web API吗?,asp.net-mvc-4,asp.net-web-api,application-structure,Asp.net Mvc 4,Asp.net Web Api,Application Structure,我正在MVC中的一个项目中工作,该项目具有移动应用程序,因此有一点很清楚,我们必须使用Web API,以便它可以用于移动应用程序 在创建API之后,当我们开始开发Web站点时,我们感到困惑,并讨论了是使用API还是直接访问业务对象。最后,我们得到了经验丰富的开发人员的意见,让他们使用Web API,而不是直接使用业务对象 我对这个解决方案结构感到困惑 1) 为什么我们应该使用Web API并发出HTTP请求(这很耗时)来获取或放置数据,而不是直接使用同一解决方案中的业务对象 2) 在争论之后,他

我正在MVC中的一个项目中工作,该项目具有移动应用程序,因此有一点很清楚,我们必须使用Web API,以便它可以用于移动应用程序

在创建API之后,当我们开始开发Web站点时,我们感到困惑,并讨论了是使用API还是直接访问业务对象。最后,我们得到了经验丰富的开发人员的意见,让他们使用Web API,而不是直接使用业务对象

我对这个解决方案结构感到困惑

1) 为什么我们应该使用Web API并发出HTTP请求(这很耗时)来获取或放置数据,而不是直接使用同一解决方案中的业务对象

2) 在争论之后,他们说,若客户希望在不同的云服务器上托管API和web,并且只在API上应用扩展,或者他希望有不同的url来访问API和web(这是某种逻辑)。所以在这种情况下,我们应该在同一个解决方案中从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格式


我在网上搜索过,但没有得到令人信服的答案。我发现一个博客讨论同一点,但在博客中,我的问题是为什么我们需要考虑情景3?

< P>我认为你已经用书面回答了你自己的问题,但实际上这完全归结为你的要求是什么,也许更重要的是,你的应用策略是什么。 首先,仅当您控制对数据客户端的访问时,使用WebAPI直接访问业务对象(我认为您的意思是通过viewmodels等)才有意义

如果您只需要在特定应用程序中使用来自客户端的数据,那么在同一个项目中托管WebAPI是有意义的。有时,例如,在构建SPA或富客户端web应用程序时,在同一个项目中使用web Api就足够了,因为它们只供该应用程序使用

如果您看到对同一应用程序的不同版本(手机、平板电脑、web等)的需求,那么将web Api移动到单独的项目是有意义的,因为每个应用程序都可以访问相同的Api。此Web Api将包含您的数据访问层和其中的业务逻辑层。这允许完全分离项目,并提供最大的可重用性,并确保项目不同版本之间的数据一致性。显然,通过这种设置,您的Web Api层是独立的,可以单独测试/部署/扩展


综上所述,你需要考虑你的需求并评估你能达到的技术。通过以上内容,我希望您了解Web Api的适用范围以及它能提供什么

谢谢!在我的场景中,我必须创建API,因为我们还有移动应用程序,在项目API方面,我们称为业务层(单独的项目),业务层与数据访问层(单独的项目)通信。所以我的问题是,如果我们将我们的API和web托管到不同的服务器上,那么在创建项目时调用API(HTTP请求)可能需要更长的时间,而不是使用业务层的方法,并且我们拥有业务层的.dll。在API控制器中,我们只是将业务输出转换为json格式。