2016-08-05 69 views
0

我目前正在嘗試通過在API響應中包含指向相關資源的鏈接來嘗試做一點HATEOAS的API。REST和HATEOAS:屬性中的鏈接

在某些地方,我有(ab?)使用鏈接來處理文章圖片等內容。因此,例如文章資源可能是這樣的:

{ 
    "type": "article", 
    "id": "1", 
    "links": { 
    "self": "/api/articles/1", 
    "image": "/files/b4d7802c-9cbb-4b65-9181-28cb547d2796" 
    }, 
    "attributes": { 
    "title": "My first blog entry", 
    "slug": "first", 
    "created_at": "2016-08-01T00:00:00Z" 
    } 
} 

正如你所看到的,我已經添加了鏈接到文章的形象給links哈希值。這個想法是:這是一個URL,所以它可能應該去那裏。然而,人們也可能認爲文章圖像是文章的一個屬性。

所以,我的問題: 在REST社區中是否有任何商定的準則處理如何判斷URL是超媒體鏈接還是屬性?這兩種方法的優點/缺點是什麼?

回答

1

在REST社區中是否有任何商定的準則處理如何判斷URL是超媒體鏈接還是屬性?

如果超鏈接鏈接出現在由表示的媒體類型定義的鏈接元素中,則它是超媒體鏈接。

如有疑問,請參閱您的參考實施:萬維網。什麼時候是HTML文件中的URL鏈接?元素,區域元素,鏈接元素;全部在spec。匹配p元素中間格式良好的URL的生產規則的字符序列?不是一個鏈接。

這裏是菲爾丁曾在2008

一個REST API的說應該把幾乎所有的描述努力在確定用於表示資源和驅動應用程序狀態的媒體類型(S),或在定義擴展現有標準媒體類型的關係名稱和/或啓用超文本標記。

換句話說,您應該使用超媒體格式,其中鏈接和屬性之間的差異已被很好地指定。

現在,假設你有一個表示,這種區別是明確指定的,你應該使用哪一個?答案是你應該以任何適合你的用例的組合來使用它們。

創建一個鏈接對任何期望宣傳與其他可識別資源的關係的表示都有意義。也就是說,正如你可能猜到的那樣,這是網絡上的一個非常常見的情況,並且通常在使用HATEOAS時。

我認爲URL作爲狀態有用的用例主要是您正在編輯內容的情況 - 如果我要加載我的個人資料的表示以便我可以更改我的主頁,那麼表示很可能包括我以前的首頁作爲州?

當然,人們也可能會認爲它屬於更新配置文件鏈接關係 - 再次,應該檢查他們的假設與「你將如何在網頁中做它?」。啓發式。

+0

感謝您的詳細解答。不幸的是,你根本沒有提到圖像。從我收集的信息來看,它聽起來有點像文章圖像(作爲一個相關但完全獨立的資源)應該在鏈接中引用。 (在HTML中,這就像使用圖片標籤一樣。) – Franz