除了使用HttpClient之外,使用RESTful API围绕RESTful API构建MVC应用程序是否明智?

时间:2018-03-26 16:48:35

标签: c# asp.net-mvc rest architecture

我的老板想为我们的新项目提供完整的REST API。但是,他也想要一个用户界面,我们的截止日期不是很慷慨。学习一个体面的前端框架(Angular,React,Vue)可能需要花费太长时间。

他问我们是否可以完全使用MVC与REST API对话。我向他解释说MVC意味着视图与控制器紧密耦合。

他问为什么我们不能完全构建REST API,然后制作一个MVC应用程序,在控制器(或服务类)中使用HttpClient来命中API。这是个坏主意吗?我告诉他,这似乎是另一个需要维护的大层,而且大多数人可能正在使用一个漂亮的前端框架与他们的后端交谈。

我也觉得我对其他人如何处理这种情况知之甚少。所以那些必须的人都拥有适用于所有新应用的REST API。你如何为它构建UI?我们正在使用Swagger,因此如果有帮助,可以生成TypeScript或C#客户端。

4 个答案:

答案 0 :(得分:3)

  

学习一个体面的前端框架(Angular,React,Vue)可能会   证明需要花一点时间。

MVC是一个不错的前端框架。你不同意吗?

  

他问我们是否可以完全使用MVC与REST API对话。一世   向他解释说MVC意味着视图紧密耦合了   控制器。

他是对的,MVC并没有把你紧紧地联系在一起。糟糕的编程紧密结合。

  

他问为什么我们不能完全构建REST API,然后呢   制作一个在控制器(或服务)中使用HttpClient的MVC应用程序   打败API。那是个坏主意吗?

MVC到API很常见。就像你的老板说的那样,你有一个MVC(UI层)控制器使用HttpClient实例连接到你的API。他把它钉在了这里。

你的老板描述的是微软堆栈中非常常见的东西。

答案 1 :(得分:1)

  

他问我们是否可以完全使用MVC与REST API对话。

是的,这很常见。当前版本的MVC 基本上MVC/WebApi包含在一个 Framework 中。

  

我向他解释说MVC意味着视图与控制器紧密耦合。

即可。除了构建模型和路由到视图之外,控制器实际上与其他任何事情无关。 我从头开始构建的每个项目,视图都不知道控制器,大部分时间只知道传递给它的模型(有时甚至没有模型) 。有人可以将视图紧密耦合到控制器,但我不建议这样做。

  

他问为什么我们不能完全构建REST API,

你可以,很容易,我几乎一直都这么做。

  

创建一个MVC应用程序,在控制器(或服务类)中使用HttpClient来命中API。

这是一个坏主意 如果他们是同一个项目。没有充分的理由添加另一个网络层。它没有提供任何价值。

  

我也觉得我对其他人如何处理这种情况知之甚少

所以这真的是我个人的意见。我从使用jQuery的2.0版以来一直使用Asp.net-mvc。我开始使用带有KnockoutJS的MVC,它将95%的数据移动到API调用中,并且我的大多数视图都没有模型。我曾经使用Angular进行过项目,但基于我非常有限的知识,拾取起来要困难得多,而且似乎需要更多的东西来完成简单的工作。我目前正在与Kendo(类似于Knockout MVVM)合作,它完成了这项工作。在具有前端Javascript框架的所有这些实例中,我的大多数视图都是无模型的,完全依赖于API。

如果我在有限的时间内开始一个新项目,恕我直言MVC / WebAPI +淘汰赛是非常容易的。根据我的喜好和经验,这只是我的意见。

HOWEVER 警告:咆哮

他为什么要把它作为REST Api?说真的,当任何类型的经理告诉我应该用什么工具来构建解决方案时,我真的很讨厌。这是我们这个时代新的/旧的SOA(面向服务的架构)。有时添加一个没有理由的需求只会增加更多的时间/资源来解决问题。

例如:

经理:我需要将托盘送到目的地。创建一个可以尽可能高效地将一个托盘运送到目的地的车辆。哦,它需要4扇门!

我:为什么 f 需要四扇门?因为你喜欢4门?因为这是新的热潮?

答案 2 :(得分:0)

  

我的老板想为我们的新项目提供完整的REST API。但是,他也想要一个用户界面,我们的截止日期并不是很慷慨。

如果您使用HTML作为媒体类型,则可以使用任何您喜欢的网络浏览器来呈现UI。

某些json超媒体格式也可能有浏览器;例如HAL作者Mike Kelly有一个browser的github项目。

答案 3 :(得分:0)

如果您的后端位于关系数据库中,并且确实您的截止日期很紧,那么可以选择手动编写API内部代码。看一下SlashDB,它将数据库包装在一个直观的API中进行读写,并提供HTML格式的GUI。 In还有一个用于AngularJS的SDK,通常易于在任何框架中用于任何Web /移动应用程序。

https://slashdb.com

这可能只是给你足够的时间来在你选择的框架内完善网络应用程序,而不是把时间花在数据访问代码上,而数据访问代码往往是"隐形"给用户。

免责声明:SlashDB是我公司的产品。