我一直在試圖實現一個RESTFul體系結構,但我對自定義媒體類型的好壞感到十分困惑。HATEOAS內容類型:自定義MIME類型
目前我的應用程序使用Http Link:header來傳達「鏈接」。這非常棒,我使用它的title屬性,允許服務器描述這個'行動'實際上是什麼,尤其是當提交給用戶時。
我很困惑的地方是我是否應該指定一個自定義的mime類型。例如我有一個用戶的概念。它可能與當前資源相關聯。我要舉一個例子,說我有一個拍賣品。我們可能讓用戶「看」它。因此,我將包括鏈接
<http://someuserrelation> rel="http://myapp/watching";title="Joe Blogg", methods="GET"
在標題中。如果您有能力將該用戶從觀看中移除。
<http://someuserrelation> rel="http://myapp/watching";title="Joe Blogg", methods="GET,DELETE"
我與此很高興,如果客戶有正確的角色,他可以刪除的關係。所以我正在定義如何處理關係。整潔的事情是,我們稱之爲「關係」資源的GET,我將客戶端重定向到用戶資源。
什麼讓我感到困惑的是是否使用自定義MIME類型。在互聯網上有兩種說法,在我看來這是一種說法。
我已經完成了一個示例,我在其中稱爲HEAD
的未知網址,服務器返回Content-Type: application/vnd.myapp.user
。然後,我的客戶決定它是否可以理解這種mime類型(它維護它理解的視圖資源的映射),並且會遵循它,或者說明它無法弄清楚這個鏈接結尾處的內容。
這是不好的?我必須保持特殊的MIME類型。特別奇怪的是,我非常樂意使用標準的application/user
格式,但無法在任何地方找到指定的格式。
我開始認爲我應該試圖完全猜測在任何HTTP響應中呈現什麼,幾乎可能是我的RESTFul api應該只是呈現html,而不是試圖用json/xml做任何事情。
我試過搜索(甚至Roy Fieldings博客),但找不到任何描述客戶端應該如何處理這種情況的東西。
編輯:我與包括自定義類型的論點是,它可能不一定是一個'用戶'看項目,它可能是application/vnd.myapp.group
。通過獲得響應,客戶端知道身體有不同的東西,所以更改爲顯示組的視圖。但是這種耦合的mime-type
查看不好?
請參閱對我來說很奇怪的事情是,客戶端和可能是MIME類型幾乎必須指定所有可能的事情,觀看'。我舉了一個例子,說明未來可能會改變「觀看」背後的資源,例如一羣人。你說客戶端語義上知道它是一個用戶,但是它應該如何?它不應該得到MIME類型的服務器發回並處理它,而不是假設它是一個'application/vnd.app.user',如果它是一個不同的資源,也有這種關係? –
如果您不想要,您不必指定鏈接指向用戶。但是,你怎麼知道首先有一個鏈接?或者它的「關係」屬性意味着什麼?重點是,你想分配返回的表示的任何語義必須通過一個MIME類型。所以你至少必須定義,有潛在的用戶鏈接,這隻能通過MIME類型來完成。否則,該消息不是獨立的。 –