2013-09-23 39 views
24

我已經閱讀了版本控制RESTful服務上的許多Stack Overflow(和其他)帖子。 說實話,這有點令人難以置信。供應商MIME類型(用於API版本)

我決定爲我們的(邊緣)RESTful服務使用Accept:標頭,以便客戶端可以請求特定版本的資源。我不清楚的是在Accept頭中指定的內容。

我經常看到的例子是這樣的:

Accept: application/vnd.mycompany.myapp.customer-v2+json 

我的問題是:

  1. 我是正確,所有類型的越南盾必須註冊? (http://www.iana.org/cgi-bin/mediatypes.pl

  2. 版本和類型(即-v2 + json)是類型的一部分,因此每個版本和類型都需要註冊?

  3. 是否有任何理由使用vnd代替不需要註冊的「x-」子類型?例如:

    Accept: application/x-mycompany.myapp-v2+json 
    

    現有API僅限於內部使用,但將來會暴露給客戶。

  4. 不確定這是否合理,但是可以使用現有類型但添加版本? (當前的API返回 「應用程序/ JSON」)

    Accept: application/json-v2 
    
  5. 哪些附加版本和類型上可接受的格式(例如-V2 + JSON)。

  6. 如果客戶端請求不支持的版本,該怎麼辦? 406是否正確答案?客戶可以請求任何版本嗎?或者更一般地說,如果客戶端沒有提供Accept頭或Accept:*/*呢?

歡迎任何其他建議。當然,目標是允許更改服務爲特定資源返回的內容,但不會破壞現有客戶端。

下面是我看了最近的資源的簡短列表:

+1

x-前綴已被棄用。如果它仍在使用中,你實際上需要兩者。 「vnd」。是供應商前綴。它仍然有效,並且在使用供應商特定的MIME類型時應始終使用它。 – yam655

回答

3

正如我決定跟隨jsonapi.org標準,我決定該怎麼做你的榜樣顯示。

關於你的問題:

  1. 你的MIME類型應註冊
  2. 我相信,每個版本和類型應進行登記,因爲它們是唯一的類型,在指出
  3. x-前綴已被棄用評論
  4. application/json-v2將無效
  5. 您可能會返回415 Unsupported Media Type或只是400 Bad Request
+1

你認爲像'application/vnd.mycompany.myapp.customer + json; version = 2.0' –

+2

[415](https://tools.ietf.org/html/rfc7231#section-6.5.13)表示**請求負載**的格式不受服務器支持。 [406](https://tools.ietf.org/html/rfc7231#section-6.5.6)更適合OP的需求。 – sp00m