2011-04-05 50 views
0

我已經花很多時間閱讀DataContact和的ServiceContract版本技術:WCF休息DataContract和的ServiceContract版本

Best practices for API versioning?

我從所有的這些拿走有以下幾種

1)休息的URI需要進行版本控制。

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

2)涉及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> 

因此,這裏是我的問題。每個REST資源操作:

1)假設有數百個數據合同和許多ServiceContracts,那麼最好的是什麼類庫結構保持不同的版本和名稱空間?

2)如果Uri是版本化的,我們是否甚至需要爲ServiceContracts指定命名空間?

3)假設有50個數據合同。他們都有名字空間http://example.com/2011/04/01/。如果創建了10個這樣的更改和新的命名空間,http://example.com/2011/04/05/。另外40個應該複製到新的命名空間嗎?

我最關心的REST命名空間和URI版本是可維護性和類冗餘。

在此先感謝您的建議和解答!

回答

1

我用版本化的服務契約和數據契約去了這條路線。這是一場噩夢。最糟糕的/最好的部分是,如果你利用超媒體,你根本不需要編寫你的API。

如果您再次閱讀shonzilla的文章,您會發現他並不主張將URI放入版本。他展示了一種使用重定向的方法,但他的大部分推理都反對它。我以前對這個問題的回答是here

這也是值得閱讀彼得威廉姆斯post在這個問題上。

我幾乎專門用於我的媒體類型的格式,我根本不使用命名空間。

+0

Darrel,謝謝你花時間回答我的問題。我有幾個後續問題給你: 1)你能指點我一些使用WCF使用超媒體的例子嗎?我對嘗試這種方法非常感興趣。 2)我認爲REST文檔應該隨着變化而變化。您能否分享您對REST服務文檔的意見? 感謝您的幫助! – Alex 2011-04-06 02:27:32

+0

@Alex這裏是我記錄REST http://stackoverflow.com/questions/1904266/documenting-a-rest-service至於超媒體,它不是真的依賴於WCF。關鍵是要返回客戶端的鏈接,而不是客戶端構建URL。 – 2011-04-06 03:02:37

+0

謝謝,Darrel! – Alex 2011-04-06 14:13:26