ODATA是否使用Microsoft Web API真正的REST架构?
我对Microsoft framework on ODATA的研究越多,我倾向于认为它不适合企业应用。该框架期望所有的数据库都直接作为ViewModel公开,即使对于像分页&这样的简单操作也是如此。ODATA是否使用Microsoft Web API真正的REST架构?
我们将*使用高雅的机制来保存呈现给JavaScript客户端的页面编号。
或者我不正确理解微软提供的OData?
编辑-1:
是ODATA V4有状态的架构?由微软 模式团队推广。我没有看到从 Asp.Net Web API(REST)到OData(Sounds STATEFUL)体系结构迁移的任何简单路径。
EDIT-2: 分页,排序&分组是从客户端进入的请求的一部分。
简而言之,MS Odata服务器端的实现是而不是 statefull,它可以被认为是一个REST架构。
我们将*使用stasteful机制坚持呈现给JavaScript客户端
您提供寻呼在请求信息的页码。例如,如果你想10项2页的你会采取前10名,并跳过10
odata-url/?$count=true&$top=10&$skip=10
正如你可以看到客户端/呼叫方指定分页,没有必要让服务器跟踪状态的客户。
同时加入$count=true
将返回基于结果集中包含的传入过滤器的记录总数(在上例中没有过滤器)。这将允许客户计算页面的数量。
框架要求所有的数据库直接暴露视图模型...
也是不正确。您可以返回IQueryable<T>
,其中T
是您的类型。 T
不一定是EF模型。例如,从DbContext
返回以下内容是可以接受的。
public IQueryable<SomeEntity> Get() {
return dbContext.SomeEntities
.Where(x => optionalPreFiltereExpression)
.Select(x => new SomeDTO(){
Prop1 = x.Prop1,
Collection1 = x.CollectionOfInterest,
// etc
});
}
为了进一步说明这一点,你也可以返回对象的一个硬编码名单,虽然这可能不是在生产中非常有可能。
public IQueryable<SomeEntity> Get() {
return new List<SomeDTO>(){
new SomeDTO(){
Prop1 = 5,
Prop2 = "Hi there"
// etc},
new SomeDTO(){
Prop1 = 6,
Prop2 = "Goodbye"
// etc}
}).AsQueryable();
}
有关于OData的所有选项的资源。我不打算在这里包括所有的东西,否则我可能只是创建第二套文档。
https://*.com/questions/2458407/difference-between-odata-and-rest-web-services –
等等,是不是分页部分客户端发送的请求?除了标题之外,这看起来就像是你的一系列陈述,你真的有问题吗? – Icepickle
@DavidTansey,谢谢答案追溯到2010年。 – Abhijeet