2016-03-12 44 views
0

我一直在尋找到REST,在維基百科專門HATEOAS,並且指出,非HATEOAS的例子

的原則是,客戶端完全通過超媒體的應用服務器

動態提供的網絡應用程序交互

客戶端如果不通過超媒體,會如何與應用程序交互?

非HATEOAS交互的一些代碼示例是什麼?

回答

2

非HATEOAS API需要關於它們之間的資源和關係的先驗知識。

例如,如果考慮庫API,「書籍」資源可能具有其作者的名稱或ID作爲屬性。爲了獲得關於作者的更多信息,API客戶端必須知道'作者'資源具有特定的上下文路徑,並且它的ID是屬性值。如果客戶想要借用該特定書籍,情況會變得更加複雜。要做到這一點,必須知道POST請求必須完成,才能創建具有某些特定屬性的特定資源(如書的ID)。如何做這些事情的知識必須在客戶端實現中進行硬編碼。在HATEOAS中,每本「書」都將鏈接到所有相關資源,並且還包含有關與該書有關的操作的信息。

貝寶客戶爭議API可以作爲一個真實世界的非HATEOAS API示例。檢查'list disputes' part:它提供了具有各種屬性的資源列表。然後參見the 'provide evidence' part。它表示客戶可能會提供與爭議有關的資源。僅僅通過跟蹤API中資源的鏈接是不可能的。如果是HATEOAS,那麼在'爭議'資源中應該有某種鏈接,以表達向每個爭議添加'證據'的可能性。作爲程序員,你必須閱讀文檔,以便知道'爭議'可以添加'證據'。

我真的推薦this video作爲關於HATEOAS是什麼以及如何表達資源之間關係的優秀學習材料。

1

你缺少的重要組成部分,是

REST客戶端,需要有關如何使用任何 特定應用程序或服務器進行交互超越 超媒體

想法的一般理解的先驗知識是不知道API中有哪些資源可用,或者如何與它們交互,客戶端可以使用HATEOAS動態發現您的API以及如何與它們進行交互。

例如:

{ 
    "_links": { 
     "self": { "href": "/orders" }, 
     "next": { "href": "/orders?page=2" } 
    } 
} 

self我可以推斷出我目前是/orders /和next下一集資源可以/orders?page=2

不僅如此,它也告訴我從一個給定的資源什麼動作都可以給我上資源狀態

即在這種情況下基地,應該有訂單的第二頁,否則next不會是一個選擇。 (它會在響應中)

查看Hal Browser,它允許您動態導航API,而無需事先了解它。

+0

客戶是程序員/人員,而不是程序,因爲程序不知道這些鏈接意味着什麼? –

+1

nope,如果你的客戶端(應用程序)知道它可以很容易地導航api,這裏是一個例子http://dracoblue.github.io/hateoas-browser/網站對api一無所知,但是能夠瀏覽api – shenku