Я потратил много часов, читая о методах управления версиями 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 - это удобство сопровождения и избыточность классов.
Заранее спасибо за ваши предложения и ответы!
Я пошел по этому маршруту с версионными контрактами на обслуживание и контрактами на передачу данных. Это был кошмар. Хуже / лучше всего то, что если вы пользуетесь гипермедиа, вам совсем не нужно создавать версию API.
Если вы снова прочитаете пост Шонзиллы, вы увидите, что он действительно не рекомендует вставлять версии в URI. Он показывает способ сделать это, используя перенаправления, но большинство его рассуждений выступает против этого. Мой предыдущий ответ на этот вопрос здесь
Стоит также почитать Питера Уильямса пост на эту тему.
Я использую XML почти исключительно для формата своих типов медиа и вообще не использую пространства имен.