2013-01-04 30 views
4

我喜歡REST HATEOAS使您的API可通過超鏈接發現的概念。人們喜歡使用ATOM格式的XML進行鏈接,您甚至可能甚至不需要對您的API進行版本管理。但是,我只是在做JSON,我想對我的API進行版本化,並且仍然在做HATEOAS。API設計:HATEOAS,json,版本控制和媒體類型

看來最好的做法是使用供應商的媒體類型,如application/vnd.me.v1+json,但是這裏有所有關於JSON超鏈接和HAL,JSON + Collecton和Siren等都沒有的格式。媒體類型。

所以,這是我的困惑。首先,爲什麼通過媒體類型指定格式?爲什麼不能在JSON中包含鏈接只是客戶遵循的慣例?這不就是hm-json瀏覽器如何發現鏈接嗎?

而且,如果它必須被定義爲媒體類型,就像這樣的工作?

application/vnd.me.v1.hal+json 

有人嗎?

回答

2

首先,爲什麼通過媒體類型指定格式?

是的,你可以有一個鏈接格式的約定,但是,任何約定只能在解包HTTP消息正文後才能被發現。由於媒體類型是標題,消息的主體可以作爲整個單元被接受或拒絕。這使得處理請求對不支持所提供媒體類型的用戶更有效。

應用/ vnd.me.v1.hal + JSON

據我瞭解,媒體類型可以作用域適合你所描述的API的水平。因此,您可以選擇擁有單一表示的媒體類型,全部遵守相同服務的表示組,或整個組織的單一媒體類型。

This is a good SO post考慮到媒體類型:

+0

謝謝,您的解釋和鏈接一直都很有見地。就第二個問題而言,如果客戶端了解HAL並將application/hal + json視爲媒體類型,則它可以自動發現鏈接,但是當媒體類型爲application/vnd.me時,同一客戶端會理解並自動發現HAL格式鏈接。 v1.hal + JSON? –

+0

我可能是錯的,但我不這麼認爲。 IANA文件和支持標準媒體類型。所以,我希望這些支持,但在HTTP規範中,它似乎並沒有表明消費者可以自動理解媒體類型(除了類型/格式)的特殊格式。 –

+0

現在我很困惑。那麼,hal + json對媒體類型有什麼意義呢? –