关于MVC图中REST的澄清

时间:2015-04-11 13:23:11

标签: asp.net-mvc asp.net-mvc-4

首先,我不知道这是否是此类问题的最佳位置,因为它不是真正的代码。如果我应该使用其他网站,请告诉我。

我正在为报告做一个MVC 4架构图,因为这是我使用MVC的第一个项目,我想知道是否有人可以澄清视图和控制器之间的REST(HTTP POST等),或控制器到模型既然控制器正在获取并设置数据?还应该在服务器端绘制模型,在客户端查看+控制器?

此刻我的模拟很少。  http://postimg.org/image/ebbg2g82b/ Diagram 1


Architectural overview of Job Tracking System

1 个答案:

答案 0 :(得分:2)

  • 首先,ASP .NET MVC是服务器端框架。基本上,您在控制器中编写的所有代码,模型以及在视图中编写的C#(Razor)代码都在服务器上执行。

  • REST(Representational State Transfer)是一种架构风格,描述了客户端和服务器之间通信的标准。 Wen你声称你的应用程序实现了REST原则,你声称你支持使用你的应用程序的标准。例如,如果你问任何熟悉SQL的人(无论是P-SQL还是T-SQL)他们应该使用哪个术语来查询数据,他们会告诉你SELECT对吗?您可以对REST principles应用相同的类比:为了查询来自服务器HTTP GET的数据,应该使用另一个规则HTTP GET不应该修改任何服务器数据。另一个例子是创建一个新对象 - 应该通过HTTP POST完成,除了动作的执行状态之外不应返回任何内容:201 - 成功创建或500(或任何其他HTTP错误状态),如果是错误。

所以如果我们回到你的问题:

  

有人可以向我澄清一下,视图和控制器之间是REST(HTTP POST等),还是模型控制器,因为控制器正在获取和设置数据?

REST既不应用于控制器和视图之间,也不应用于控制器和模型之间。 REST架构通过指定应如何访问它们以及它们应返回的内容应用于您的控制器。例如

public class UserController : Controller
{
    [HttpGet]
    public JsonResult Users (int? id)
    {
       //if id is not null return one specific user otherwise return a list of users 
    }

    [HttpPost]
    public ActionResult Users (User user)
    {
       //Create a new user and return an appropriate status: 201/200 on success or an appropriate error status 
    }

    [HttpPut]
    public ActionResult Users (User user)
    {
       //Updates a user and return an appropriate status
    }

    [HttpDelete]
    public ActionResult Users (int id)
    {
       //delete a user and return an appropriate status
    }
}

如果你的MVC应用程序将视图作为响应返回(这是其中一个主要部分),那么应用REST就不那么重要了,所以如果这是一个案例,我就不会那么关心它了。如果您计划将应用程序用作公开API以查询和操作数据的服务,ASP.NET WebApi是一种方法,在这种情况下,我将尝试使其成为RESTfull。

关于你的图表:

  • 当您使用“服务器”一词时,您将谈论在服务器上执行的代码。 ASP.NET MVC框架,它是服务器端框架,因此控制器,视图和模型都属于服务器端。有各种客户端端MVC / MVVM框架,例如AngularJs,Ember.js和许多其他框架,因此MVC本身并不意味着它是客户端或服务器端。