是什么让DbDataProvider不RESTful?

时间:2012-03-13 17:43:20

标签: asp.net asp.net-mvc web-services rest

我听过一些人发表评论说新的ASP.NET WebAPI(DbDataController)中的Entity Framework数据的默认控制器/提供程序严格来说不是基于REST的服务,但更像是RPC风格服务。我知道WebAPI框架允许您创建任何类型的HTTP服务,REST或其他,但是有人可以向我详细解释它是由DbDataController公开的服务使它不是真正的REST服务吗?

1 个答案:

答案 0 :(得分:4)

REST架构风格描述了应用于架构的以下六个约束,同时让各个组件的实现可以自由设计:

<强>客户端 - 服务器

  

统一接口将客户端与服务器分开。这种分离   关注意味着,例如,客户不关心数据   存储,它保留在每个服务器的内部,以便   客户端代码的可移植性得到改善。服务器不关心   用户界面或用户状态,以便服务器可以更简单   更具可扩展性服务器和客户端也可以被替换和开发   只要它们之间的界面没有改变就可以独立完成。

<强>无国籍

  

客户端 - 服务器通信进一步受到没有客户端的限制   上下文在请求之间存储在服务器上。每个请求来自   任何客户端都包含服务所需的所有信息   请求,并且任何会话状态都在客户端中保存。服务器可以   有条不紊的;这种约束只需要服务器端状态   可通过URL作为资源进行寻址。这不仅使服务器更多   可见于监控,但也使它们更可靠   部分网络故障以及进一步增强其网络故障   可扩展性。

<强>可缓存

  

与万维网一样,客户端可以缓存响应。回应必须   因此,隐式或显式地将自己定义为可缓存的,   或不,以防止客户重新使用陈旧或不适当的数据   回应进一步的要求。管理良好的缓存部分或   进一步完全消除了一些客户端 - 服务器交互   提高可扩展性和性能。

分层系统

  

客户通常无法判断它是否直接连接到   终端服务器,或沿途的中间人。中介   服务器可以通过启用负载平衡来提高系统可扩展性   通过提供共享缓存。他们还可以执行安全策略。

按需代码(可选)

  

服务器可以临时扩展或自定义功能   客户端通过传输可执行代码。这样的例子可以   包括Java applet和客户端等编译组件   JavaScript等脚本。

统一界面

  

客户端和服务器之间的统一接口,如下所述,   简化和解耦架构,使每个部分都能实现   独立发展。这个界面的四个指导原则   详情如下。

http://en.wikipedia.org/wiki/Representational_state_transfer#Constraints

&#34; REST架构的唯一可选约束是按需代码。如果服务违反任何其他约束,则不能严格地将其视为RESTful。 DbDataController类将实体框架模型公开为HTTP服务。这些服务与WCF数据服务具有很强的功能重叠,例如CRUD支持,元数据和请求批处理。它们甚至部分地模仿了OData的查询字符串格式。但是这些服务遵循RPC样式,它们不是RESTful而且它们不使用OData。&#34;来自这个网站的qoute:

WCF Data Services and ASP.NET Web API