2010-11-09 22 views
2

我有以下(假設)情況:正確的重新URI設計

申請報告在學校的班級學生。我有3桌學校,班級,學生。班級有FK school_id,學生有FK class_id。

我有我的實體所有設置和準備去,我即將通過Rest界面公開他們。

如果我的URI是這樣的: 學校 - 學校名單
學校/(編號) - 具體學校
學校/ {ID} /班 - 班名單
學校/ {ID} /班/ (編號) - 類特定
學校/ {ID} /班/ {ID} /學生 - 列表學生
學校/ {ID} /班/ {ID} /學生/(編號) - 特定學生

即使在具體的學生的情況下,我會忽略我將忽略學校編號和班級ID,因爲我只關心我的查詢是學生ID。

我應該只有: 學校/學生/ {id} - 對於特定的學生。

回答

4

從多個位置公開資源沒有問題(儘管如果存在多個位置,指定canonical url是一個好主意*)。

因此,它可能是有意義的提供以下所有的URI:

lists: 

student 
classes/{id}/student 
schools/{id}/classes/{id}/student 

specific: 

student/{id} 
classes/{id}/student/{id} 
schools/{id}/classes/{id}/student/{id} 

在你的情況實體之間的關係不是一個實體本身。如果是這種情況(例如,如果你的資源類 - 學生的屬性指定了學生在班上的時間),那麼包含classstudent ID的URI變得更加重要,因爲它們提供了一個好地方揭露關係本身的屬性。

*最好爲客戶端提供規範化的url,您可以將它作爲響應頭中的「Content-Location」的值發送給客戶端。

+0

對於列表部分,學生列表的值是否是引用列表中每個特定學生的規範位置的URI列表? – ScottCher 2012-05-02 17:05:18

+1

+1,因爲有關將內容位置添加到規範url的引用。好的提示。 – ScottCher 2012-05-02 17:09:17

+0

@ScottCher,我不認爲它很重要,但個人在頁面內容我會使用鏈接,只是將學生ID添加到當前的URL。這種方式的URL上下文作爲一個簡單的「麪包屑」功能。 – 2012-05-02 18:03:56

1

另外,使用複數/單數名稱的慣例是有用的。 有些人只喜歡單數的名字,有些人(比如Ruby人)同時使用了兩種轉換工具。例如,在Ian的回答中,student列表URL必須是students

+0

我同意這一點很重要 - 雖然也是爭議的來源!因爲我在多語言環境下工作,而其他語言的複數可能比英語複雜得多,所以我更喜歡單數的資源,但在我的回答中,我遵循問題​​中的示例。 – 2010-11-09 15:41:23

+0

我總是使用單數:) – 2010-11-09 18:24:28

+0

有趣的是,當結果可能是一個集合(0-many)時,我更喜歡複數。那麼/ classes/{id}/students會發送更多信息,而class/{id}/students {id}也會發送更多信息。我得到你所說的關於它是有爭議的和多語言環境。關於標準的神奇之處是什麼,因爲它們有很多呢? 8) – ScottCher 2012-05-02 17:08:26