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

标签 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. 传递调用者想要返回的属性名称字符串数组

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

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

以下是 3. 的函数的示例:

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

然后调用者就可以:

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

通过广泛使用默认值和隐藏 null,返回的 XML 将是:

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

现在上面提到的问题是试图让它与像 <w> 这样的东西一起很好地发挥作用。远高于它本身具有子项以及列表具有子项的可能性。

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

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

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

或者我是否让一切变得过于复杂?

最佳答案

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

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

这似乎回答了我的问题。

关于web-services - 支持延迟加载所有属性的 Web 服务模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8382081/

相关文章:

php - 通过 setter 进行依赖注入(inject)

algorithm - 客户端服务请求的隐式 "Authentication"

asp.net - 如何将 JSON POST 从 iOS 设备发送到 ASP.NET URL

java - 获取完整的用户名 siteminder

c# - 来自 Web 服务的哈希表作为 JSON

Android - API 级别 < 11 的 fragment API

api - 这个API是不是太简单了?

android - 如何以编程方式加入 android 中的 2 个联系人?

Android 职责分离示例

javascript - 如何管理状态?