【问题标题】:WCF Rest DataContract and ServiceContract VersioningWCF Rest DataContract 和 ServiceContract 版本控制
【发布时间】:2011-04-05 22:06:02
【问题描述】:

我花了很多时间阅读 DataContact 和 ServiceContract 版本控制技术:

Best practices for API versioning?

以下是我的收获

1) REST Uri 需要进行版本控制。

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

2) 每个涉及到 XML 的 REST 资源操作都需要包含 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 版本最大的担忧是可维护性和类冗余。

提前感谢您的建议和回答!

【问题讨论】:

    标签: wcf rest namespaces version datacontract


    【解决方案1】:

    我使用版本化的服务合同和数据合同走这条路。这是一场噩梦。最糟糕/最好的部分是,如果您利用超媒体,您实际上根本不需要版本化您的 API。

    如果您再次阅读 shonzilla 的帖子,您会发现他真的不提倡在 URI 中放置版本。他展示了一种使用重定向的方法,但他的大多数推理都反对它。我之前对这个问题的回答是here

    同样值得一读 Peter Williams post 关于这个主题。

    我几乎只将 XML 用于媒体类型的格式,而且我根本不使用命名空间。

    【讨论】:

    • 达雷尔,感谢您花时间回答我的问题。我有几个后续问题要问您:1)您能否指出一些将超媒体与 WCF 结合使用的示例?我真的很想尝试这种方法。 2) 我认为 REST 文档应该随着变化而发展。您能否分享您对记录 REST 服务的看法?感谢您的帮助!
    • @Alex 这是我对记录 REST 的看法stackoverflow.com/questions/1904266/documenting-a-rest-service 至于超媒体,它并不真正依赖于 WCF。关键是返回链接供客户端使用,而不是客户端构建 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多