2014-03-05 22 views
1

當資源有它被檢索的唯一標識符:如何命名使用兩個標識符描述的RESTful端點?

/building/{building_id}

但是,如果「事件」資源使用building_idfloor_id參數描述。如何命名用於檢索當前事件的RESTful端點?

確切地說,「事件」資源具有唯一的標識符(id)。 building_id,floor_id的組合應該返回特定位置的現場活動。

回答

3

但是,如果使用building_id和floor_id參數描述「事件」資源會怎麼樣。

是嗎?我建議這樣的:

如果

GET /events/{id} 

返回一個事件和

GET /events 

回報所有事件,然後

GET /events?building_id={building_id}&floor_id={floor_id} 

返回(可能只有一個)事件的列表( s)的組合building_idfloor_id

這看起來像經常使用的過濾器或搜索集合資源模式。

+0

如果可能的話,添加查詢參數是最好的解決方案。+ 1 –

1

除了Lutz的解決方案,如果你不想讓他們成爲query parameters
假設,從因爲它看起來的名字,floor_id是building_id的一部分,所以如果事件資源被定義爲兩者的結合,它可以像

/event/{event_id}/building/{building_id}/floor/{floor_Id} 
+0

如果可能的參數組合的數量很少,可以使用這個參數。如果參數的數量較大或者它們是可選的,則將變得難以使用。 – 2014-03-05 21:28:00

+0

Right,Lutz,在查詢參數中添加是最好的選擇,我只在我們不想要查詢參數時才提出這個問題 –

0

我開始試圖想什麼資源擁有什麼。顯然,建築物自己的地板(敲下建築物,地板被摧毀!),這樣的關係可以很好地映射到子資源,但是是否會自己的建築物或建築物/樓層自己的事件?沒有?然後我們通過鏈接關聯這些。 (A樓威力有一個當前事件的概念的東西它擁有,但這是真的事件的鏈接,而不是一個事件本身

/building/{building_id} 
/building/{building_id}/floor/{floor_id} 
/building/{building_id}/floor/{floor_id}/current-event --redirect--> some event 
/event/{event_id} 

事件或許應該有超鏈接的建設和它涉及的地板。換句話說,如果樓層沒有當前事件,則獲取…/current-event將導致404,如果事件,則303重定向將表明它是哪個事件。 (您可能還想讓地板本身的記錄包含事件的真實鏈接以及便利的查找子資源。)

一個好的RESTful應用程序看起來非常像密集鏈接的網站。使用鏈接和重定向的力量!

+0

不會影響您嘗試傳遞的消息,但在我的示例中,「floor」並不涉及物理建築地板,而是高程水平。 '/ building/{id}/floor/{id}'是不明確的。因此,我選擇了Lutz的建議。 – Gajus