在 Wcf REST 中,返回请求较少的较大模型还是返回请求较多的较小模型更好
Posted
技术标签:
【中文标题】在 Wcf REST 中,返回请求较少的较大模型还是返回请求较多的较小模型更好【英文标题】:In Wcf REST, is it better to return larger models with less requests, or smaller models with more requests 【发布时间】:2012-01-03 03:20:11 【问题描述】:我有一个 SOA 应用程序,并开始遇到一些性能问题。
我的 REST 模型看起来类似于...
public class Person
public Guid Id get; set;
public string FirstName get; set;
public string LastName get; set;
public Address Address get; set;
public IEnumerable<Hobby> Hobbies get; set;
public IEnumerable<Interests> Interests get; set;
public IEnumerable<Friends> Friends get; set;
当它通过 REST 返回并填充所有这些字段时,它很快就会变成一个相当大的模型。
所以,我的基本问题是......是传输大型模型(如上述)并使用 FEWER Rest 调用更好,还是传输较小的对象并使用更多 Rest 调用来检索其他数据片段更好强>。 IE。有这样的模型...
public class Person
public Guid Id get; set;
public string FirstName get; set;
public string LastName get; set;
public AddressId AddressId get; set;
public IEnumerable<Guid> Hobbies get; set;
public IEnumerable<Guid> Interests get; set;
public IEnumerable<Guid> Friends get; set;
现在根据需要获取其他属性...
想法?
【问题讨论】:
我很好奇 - 你的性能问题是什么?构建响应需要太长时间,还是响应大小的问题需要太长时间才能传输?另外,Friends
是 Person
的集合吗?
我做了一个测试,检索了 500 个“Persons”,页面花了很长时间才返回(12s+)。甚至不仅仅是性能问题,我只想以一种聪明的方式来构建这个东西...... :)
【参考方案1】:
就个人而言,我更喜欢返回较轻的对象。我可以详细说明原因,但这篇文章对我来说做得很好:
http://davybrion.com/blog/2010/05/why-you-shouldnt-expose-your-entities-through-your-services/
现在,在您的情况下,您可以返回对象内部的列表,然后进行 REST 调用,该调用将接受 ID 列表(在您的情况下为 Guid),然后返回对象列表,它们本身是轻量级的。这将为您提供两全其美的优势 - 更轻的对象和更少的 REST 调用。
【讨论】:
【参考方案2】:rpc 调用的一般智慧是让它们变得更粗,但就像其他一切一样,这一切都取决于你的情况。 IMO,您应该尝试使其尽可能厚实,而不会提取太多数据:-) 所以如果你有一个 ui 什么的,你应该专注于用户任务,而不是数据,并查看用户将在该 ui 上执行哪些任务,以及它需要多少数据。您应该让他们拥有与任务相关的 dto,并显式提取这些 dto,但底线是 DTO 与任务相关,并且业务模型存在于服务器上(这与业务更相关)。
【讨论】:
以上是关于在 Wcf REST 中,返回请求较少的较大模型还是返回请求较多的较小模型更好的主要内容,如果未能解决你的问题,请参考以下文章
跨域 jQuery Ajax 请求和 WCF REST 服务
在 WCF REST 服务 POST 方法中处理 Json 请求数据