支持延迟加载所有属性的Web服务模式

时间:2011-12-05 07:18:14

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

我正在尝试为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. 传递调用者想要返回的字符串数组属性
  4. 我倾向于第三个选项,但我想要一些不同的东西,它不支持子对象,我考虑传递你想要返回的xml架构而不是数组。

    我希望API支持延迟加载,这就是为什么第三种方式似乎也可行。

    以下是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>
    

    现在上面提到的问题是试图让它与上面的<w>之类的东西很好玩,它本身有子项以及列表有子项的可能性。

    由于我有太多属性,我不能只为每个属性使用ws方法。

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

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

    或者我过度复杂化了什么?

1 个答案:

答案 0 :(得分:0)

我在部分回复和部分更新中找到了Google API的文档:

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

这似乎回答了我的问题。