似乎大多数WebAPI示例都返回了一些模型(域模型或特定视图模型)。
使用域模型时,我们实际上在ajax调用的视图中请求的数据超过了所需的数据,然后使用JavaScript构建我们的视图模型(假设我们正在构建一个Web应用程序)。
我尝试为每个页面(视图)使用不同的视图模型,这样我就可以减少网络占用空间并仅返回需要的字段。但是在ApiController中我会有太多的GET方法。我们不可能预测未来的需求并建立一个返回各种视图模型的API。
我想模仿Facebook Graph API并构建一个类似于:
的urihttp://... api/games/333?fields=id, name, price, imageUrl
我们的用户应该只用这几个字段来更新记录。
详细说明可在Google代码博客条目中找到:Making APIs Faster: Introducing Partial Response and Partial Update。
Some other posts here表明这超出了ASP.NET WebAPI
的当前能力。 ServiceStack
或其他一揽子方案会帮助我们实现目标吗?
答案 0 :(得分:2)
尝试此项目:https://github.com/AnthonyCarl/ServiceStack.PartialResponse作为问题的部分响应方
ServiceStack.PartialResponse.ServiceModel
Google Style Partial ServiceStack.Net的响应。目前只有以下内容 支持类型:
- application / json
- application / jsv
- text / html
- 目前不支持application / xml。
我想将其作为ServiceStack IPlugin实现,但我无法做到 找出如何获得响应DTO所需的访问权限 我的方法。目前,这是作为IRequestContext实现的 扩展
提供场选择器
可以使用标题或查询字符串传递字段选择器。通过 默认字段选择器由两者组合而成。重复的字段 选择器减少了。字段选择器应用于所有条目 如果选择器引用列表,则列表。
答案 1 :(得分:2)
在ServiceStack中实现部分更新有两种选择。有关使用具有可空值的请求DTO以及ServiceStack中的PopulateWithNonDefaultValues
和类似扩展方法的方法,请参阅this question about implementing PATCH requests,以获取PATCH样式的请求,其中客户端可以发送任何字段的子集。请求机构。如果请求正文中不存在给定字段,则不会更新域对象的该属性。
如果您确实需要使用查询字符串来指定应更新的字段子集,那么您仍然可以使用上述方法,但添加一些代码,这些代码首先将传入请求DTO对象中的任何值清零。未在查询字符串中命名。然后,您可以再次使用PopulateWithNonDefaultValues
将剩余值复制到域对象。
另外,评论你的帖子的另一部分与我刚刚给出的建议密切相关:
在使用域模型时,我们实际上在ajax调用...
的视图中请求的数据超出了所需数量
以下是基于消息的设计有用的地方:将请求/响应消息建模为单独的DTO类,而不是重用和公开内部域模型对象。在超额收益中,您将消除在请求/响应模型中暴露不必要字段的问题。基于消息的设计是推动ServiceStack实施的核心概念之一。但是,您可以使用Web API或MVC获得类似的结果。我强烈建议阅读this article,讨论此设计在ServiceStack中的工作原理。
答案 2 :(得分:1)
您可以使用OData Protocol,查看this example。 它可以使用键:$ select,$ expand,$ filter for search,选择一些fileds。 最重要的是,ASP.NET WEB API有一个支持此功能的SDK。