2016-02-04 35 views
0

假設我正在拍攝符合HATEOAS標準的API。我提供了端點/cars/{id}。如果用戶要呼叫GET /cars/12,他們會看到類似這樣的:正在更新HATEOAS rels

{ 
    "color": "Red", 
    [...], 
    "links": [ 
     { "rel": "driver", "href": "/people/123" }, 
     { "rel": "owner", "href": "/people/456" }, 
    ] 
} 

在這個模型中,我怎麼更新有關係嗎?就像說,汽車被賣到/people/42PUT是否更改ownerhref的值?

回答

1

有很多可能性來做到這一點。這個API並不需要是一個對一個的數據表示,所以用它記:

  • 可以使用PUT修改的資源,即使你想
  • 可以公開一個單獨的鏈接「所有者」資源爲汽車和PUT新東家有
  • 你能暴露一個‘從人擁有的汽車’資源,並POST到該集合,這將導致汽車改變車主

這取決於系統如何分配,它可能並非所有資源都在您的控制之下。人們可以成爲第三方資源的聯合鏈接,在這種情況下,他們可能沒有鏈接回您的系統等。

如果一切都在您的控制之下,則所有選項都是可能的。

1

您的PUT請求可以再次包含links屬性以進行更新。我想象PUT請求機構應該與您從GET收到的內容幾乎相同,但具有更新的所有者。

0

在HATEOAS服務器應該提供通過一些超媒體格式(HAL,...)的鏈接。客戶端不應直接創建,更新或刪除這些鏈接。你應該擁有財產所有者和驅動程序,客戶可以更新這些財產,但不能鏈接到所有者或驅動程序的詳細信息。這些鏈接到所有者和驅動程序的詳細信息應生成服務器,而不是客戶端。服務器可能會隨着時間的推移更改資源的URL。