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

时间:2014-06-30 05:41:05

标签: asp.net-mvc-4 asp.net-web-api application-structure

我正在开发一个具有移动应用程序的MVC项目,所以我们必须使用Web API,以便在移动应用程序中使用它。

在我们开始开发Web站点时创建API后,我们感到困惑,并讨论了是使用API​​还是直接访问Business对象。最后我们得到了更有经验的开发人员的意见,以便使用Web API而不是直接使用Business对象。

我对此解决方案结构感到困惑。

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控制器中,我们只是将业务的put转换为json格式。

我在互联网上搜索但没有得到令人信服的答案。我发现一个博客http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx讨论了同样的观点,但在该博客中,我的问题是为什么我们需要考虑情景#3?

1 个答案:

答案 0 :(得分:3)

我认为您已经以书面形式回答了自己的问题,但实际上这完全归结为您的要求,也许更重要的是,您的应用策略是什么。

首先,如果您正在控制数据客户端的访问,那么使用Web Api而不是直接访问Business Objects(我认为您通过视图模型等来表示)是有意义的。

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

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

总而言之,您需要考虑您的要求并评估可用于实现这些要求的技术。使用上面的内容,我希望您了解Web Api适合的位置以及它可以提供的功能。