我已經閱讀了版本控制RESTful服務上的許多Stack Overflow(和其他)帖子。 說實話,這有點令人難以置信。供應商MIME類型(用於API版本)
我決定爲我們的(邊緣)RESTful服務使用Accept:標頭,以便客戶端可以請求特定版本的資源。我不清楚的是在Accept頭中指定的內容。
我經常看到的例子是這樣的:
Accept: application/vnd.mycompany.myapp.customer-v2+json
我的問題是:
我是正確,所有類型的越南盾必須註冊? (http://www.iana.org/cgi-bin/mediatypes.pl)
版本和類型(即-v2 + json)是類型的一部分,因此每個版本和類型都需要註冊?
是否有任何理由使用vnd代替不需要註冊的「x-」子類型?例如:
Accept: application/x-mycompany.myapp-v2+json
現有API僅限於內部使用,但將來會暴露給客戶。
不確定這是否合理,但是可以使用現有類型但添加版本? (當前的API返回 「應用程序/ JSON」)
Accept: application/json-v2
哪些附加版本和類型上可接受的格式(例如-V2 + JSON)。
如果客戶端請求不支持的版本,該怎麼辦? 406是否正確答案?客戶可以請求任何版本嗎?或者更一般地說,如果客戶端沒有提供Accept頭或Accept:*/*呢?
歡迎任何其他建議。當然,目標是允許更改服務爲特定資源返回的內容,但不會破壞現有客戶端。
下面是我看了最近的資源的簡短列表:
- Best practices for API versioning?
- How to version REST URIs
- REST api versioning (only version the representation, not the resource itself)
- http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
- http://www.subbu.org/blog/2008/05/avoid-versioning-please
- http://www.informit.com/articles/article.aspx?p=1566460
- http://en.wikipedia.org/wiki/Internet_media_type#Prefix_vnd
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
x-前綴已被棄用。如果它仍在使用中,你實際上需要兩者。 「vnd」。是供應商前綴。它仍然有效,並且在使用供應商特定的MIME類型時應始終使用它。 – yam655