【问题标题】:web service pattern that supports lazy loading of all properties支持延迟加载所有属性的 Web 服务模式
【发布时间】:2011-12-05 07:18:14
【问题描述】:

我正在尝试为 Web 服务设计一个端点模板。我的主要要求是调用者能够指定应在返回的结果集中填充哪些属性。

我的服务返回部分对象的大型列表(最多 1M 条记录)以及单个完整对象,例如(粗略的 XML 示例,抱歉有点冗长)

列表:

<items>
  <item>
    <a>aaa</a>
    <b>bbb</b>
  </item>
  <item>
    <a>aaaA</a>
    <b>bbbB</b>
  </item>
</items>

详情:

<item>
  <a>aaa</a>
  <b>bbb</b>
  <c>ccc</c>
  ...
  <w>
    <x>xxx</x>
    <y>yyy</y>
  </w>
  <z>zzz</z>
</item>

我考虑过以下想法:

  1. 返回列表中的全部详细信息
  2. 创建更短的“列表”项类型
  3. 传递调用者希望返回的属性名称的字符串数组

我倾向于第三个选项,但我想要一些不同的东西,它不支持子对象,我考虑过传递你想要返回的 xml 架构而不是数组。

我希望 API 支持延迟加载,这也是第 3 种方式似乎可行的原因。

下面是 3. 的函数示例:

public User GetUser(long ID, string[] properties)

然后调用者就可以走了:

User.Email = GetUser(User.ID, "Email").Email

通过大量使用默认值和隐藏空值,返回的 XML 将是:

<User>
  <ID>123</ID>
  <Email>example@example.com</Email>
</User>

现在上面提到的问题是试图使它与上面的&lt;w&gt; 之类的东西配合得很好,它本身有子项目以及列表有子项目的可能性。

由于我有太多的属性,我不能只为每个属性设置一个 ws 方法。

我正在考虑选项 3。但使用 xml 架构而不是 string[].. 但我想不出一种简单的方法来定义它,我也不想为属性使用字符串名称,例如作为"Email"

最终计划是拥有一系列常用的预定义模式,只有在高级情况下,我们才需要实际定义请求的属性。但我不知道将与我的 API 通信的所有系统,更不用说它们可能各自需要的属​​性(我们为每个调用者定制 API 是不可行的)。

还是我把所有事情都复杂化了太多?

【问题讨论】:

    标签: web-services api design-patterns soap lazy-loading


    【解决方案1】:

    我找到了关于部分响应和部分更新的 Google API 文档:

    http://googlecode.blogspot.com/2011/07/lightning-fast-performance-tips-for.html

    这似乎回答了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2013-07-03
      • 1970-01-01
      相关资源
      最近更新 更多