2015-08-27 31 views
1

如果我有兩個資源,一個是從另一個創建的,我應該在哪裏放置創建端點?REST API設計:從哪裏創建依賴於其他資源的資源?

例子:

我有兩個資源,A和B,我想創建一個B.

B是一個簡單的類,它引用了A和誰創造了它的用戶,這樣

public class B { 
    private A a; 
    private User user; 
} 

用戶信息隱式發送HTTP請求,所以我不需要任何參數。

解決方案1:

發個帖子不帶任何參數來/A/123/B並返回B。這意味着A的控制者負責創建B.感覺很奇怪。

解決方案2:

寄POST ID爲123至/B。這意味着如果存在ID爲123的A,我必須在控制器中檢入B.感覺也很奇怪。

這兩種解決方案有什麼優點和缺點?我是否在過度使用API​​設計?

回答

2

您需要清楚依賴關係。

A是由B組成嗎?換言之,B是否存在於A範圍之外?

  1. 如果答案是肯定的,B可以沒有活的,最好是有一個單獨的資源:

    POST ./B 
    

你應該避免在不同的位置路徑的資源是地方。有些人可能會爭辯說,REST並不強迫你爲一個資源擁有單一端點,但保持跨越不同端點的一致性並不那麼明顯。如果您發送DELETE ./A/{id},會發生什麼情況B

  1. 如果回答爲否,意味着除非存在A,否則B不能存在,那麼最好將B作爲子資源。控制器的

    POST ./A/{id}/B 
    

來說,有什麼可以迫使你從另一控制器來管理B中。 REST的重點在於呼叫不是控制器的地址,而是資源。您創建的資源獨立於控制器。

+0

感謝您的明確和非常明顯的解釋! – zersaegen