2017-07-25 67 views
4

我正在爲另一個團隊構建的API創建一個Angular 4前端。 API遵循HATEOAS,併爲每個響應提供超媒體鏈接。如何在Angular中使用HATEOAS REST API?

我知道API的形狀,我想我只需將大量網址硬編碼到Angular Services中即可。但是,一位同事(誰是後端開發人員)正試圖說服我,我應該充分利用超媒體,因爲這意味着前端和後端之間的耦合減少(並且如果API改變,則可能會破壞)。

但是,我非常難以理解如何使用Angular的內置Http服務實現簡單的HATEOAS模式。我如何以不將所有服務連接在一起並使其難以測試的方式來存儲/共享超媒體/ URL信息?那裏似乎沒有例子。

試圖創建一個HATEOAS友好的HTTP客戶端,甚至是一個好主意,或者它可能不值得麻煩?

+1

您可以通過使用'rel'屬性找到響應中的url,並將該URL存儲到實體本身。例如,當您收到產品清單時,會從響應中獲取每個產品詳細信息頁面的鏈接並存儲在角度模型中。 –

+0

謝謝。這只是我,還是這看起來違反了單一責任原則?爲什麼應該在API的細節/編輯/更新URL中嵌入產品信息? –

+0

我不這麼認爲。這只是元信息,與產品實體高度一致。如果你硬編碼/構造URL,那麼你正在創建一個不必要的依賴關係並添加額外的責任。 –

回答

1

你的同事是對的,你應該使用後端提供的元信息。通過這種方式,您不會對不屬於此處的客戶承擔責任。爲什麼客戶應該知道從哪裏獲取實體?存儲實體(實際上是一般數據)是後端的責任。後端擁有數據,決定將數據放在哪裏,如何訪問數據,何時更改位置或持久性類型,以及與存儲數據相關的任何內容。

我該如何以不將所有服務連接在一起並使其難以測試的方式來存儲/共享超媒體/ URL信息?

爲什麼你認爲使用HATEOAS會使測試更難?事實上,沒有使用它,這使得測試變得更加困難,因爲URL是靜態的,這使得後端不可用。

您可以從後端響應中提取信息,並將其作爲元信息存儲在角度模型中,_meta密鑰或類似信息中。