шаблон веб-службы, поддерживающий отложенную загрузку всех свойств - PullRequest
3 голосов
/ 05 декабря 2011

Я пытаюсь создать шаблон конечной точки для веб-службы.Мое основное требование заключается в том, чтобы вызывающая сторона могла указать, какие свойства должны быть заполнены в возвращенном наборе результатов.

Мой сервис возвращает большие списки (до 1М записей) частичных объектов, а также отдельные полные объекты, такие как(грубый пример 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. , передавая строковый массив имен свойств, которые вызывающая сторона хочет вернуть

Я склоняюсь к 3-му варианту, но хочу что-то другое, поскольку он не поддерживает подобъекты, я рассмотрел передачу 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[] .. Но я не могу придумать простой способчтобы определить это, я также хотел бы не использовать строковые имена для таких свойств, как "Email".

. Окончательный план состоит в том, чтобы иметь серию предопределенных схем, которые используются обычно и только в расширенной версии.В случаях, когда мы действительно должны определить запрошенные свойства.Но я не имею представления обо всех системах, которые будут взаимодействовать с моим API, не говоря уже о том, какие свойства они могут пожелать (нам не удастся адаптировать API для каждого вызывающего абонента).

Илия слишком много усложняю?

1 Ответ

0 голосов
/ 06 декабря 2011

Я нашел документацию для API Google по частичным ответам и частичным обновлениям:

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

Похоже, это ответ на мой вопрос.

...