WCF Resting DataContract и ServiceContract Versioning - PullRequest
0 голосов
/ 06 апреля 2011

Я потратил много часов, читая о методах управления версиями DataContact и ServiceContract:

Рекомендации по управлению версиями API?

Я забираю у всех следующие:

1) ОТДЫХ Ури должен быть версионирован.

[http://example.com/v1/car]
[http://example.com/v2/car]

2) Каждая операция ресурса REST, которая включает XML, должна содержать пространство имен XML

<SampleItemCol xmlns="http://api.sample.com/2011/04/05">
  <Items>
    <SampleItem xmlns="http://api.sample.com/2011/04/01">
      <Test xmlns="http://schemas.datacontract.org/2004/07/WcfRestService2">String content</Test>
      <Id>2147483647</Id>
      <StringValue>String content</StringValue>
      <TestGuid>1627aea5-8e0a-4371-9022-9b504344e724</TestGuid>
    </SampleItem>
    <SampleItem xmlns="http://api.sample.com/2011/04/01">
      <Test xmlns="http://schemas.datacontract.org/2004/07/WcfRestService2">String content</Test>
      <Id>2147483647</Id>
      <StringValue>String content</StringValue>
      <TestGuid>1627aea5-8e0a-4371-9022-9b504344e724</TestGuid>
    </SampleItem>
  </Items>
</SampleItemCol>

Итак, вот мои вопросы:

1) Если предположить, что существуют сотни контрактов на данные и много ServiceContracts, какова будет лучшая структура библиотеки классов для поддержки различных версий и пространств имен?

2) Если в Uri установлены версии, нужно ли вообще указывать пространство имен для ServiceContracts?

3) Предположим, имеется 50 контрактов на данные. Все они имеют пространство имен http://example.com/2011/04/01/. Если 10 из них изменяются и создается новое пространство имен, http://example.com/2011/04/05/. Должны ли остальные 40 быть скопированы также в новое пространство имен?

Мое самое большое беспокойство по поводу пространств имен REST и версий URI - это удобство сопровождения и избыточность классов.

Заранее спасибо за ваши предложения и ответы!

1 Ответ

1 голос
/ 06 апреля 2011

Я пошел по этому маршруту с версионными контрактами на обслуживание и контрактами на передачу данных. Это был кошмар. Хуже / лучше всего то, что если вы пользуетесь гипермедиа, вам совсем не нужно создавать версию API.

Если вы снова прочитаете пост Шонзиллы, вы увидите, что он действительно не рекомендует вставлять версии в URI. Он показывает способ сделать это, используя перенаправления, но большинство его рассуждений выступает против этого. Мой предыдущий ответ на этот вопрос здесь

Стоит также почитать Питера Уильямса пост на эту тему.

Я использую XML почти исключительно для формата своих типов медиа и вообще не использую пространства имен.

...