2013-09-24 8 views
1

我正在開發一個使用Zend Framework 1.12.3的REST API。我應該如何使用REST API和Zend Framework來表示多對多的班級和教授關係?

我有三個不同的資源:班級,學科和教授。每個班級可能分配了多個科目,每個科目可能分配了一個或多個教授。

架構將是這樣的:

classes: 
    class: 
     id: 123 
     name: foo 
     subjects: 
      subject: 
       id: 14 
       name: Chemistry 
       professors: 
        professor: 
         id: 741 
         name: Jeremy Clarkson 
        professor: 
         id: 963 
         name: Richard Hammond 
      subject: 
       id: 16 
       name: Physics 
       professors: 
        professor: 
         id: 753 
         name: James May 

我想知道這是列出所有的科目和教授,最好的辦法都分配和未分配(其中實際分配將會在頁面上發生)。

我應該僅返回所分配的受試者和教授,以及包含所有受試者和教授陣列然後交叉引用那些ID?

或者我應該返回一個包含所有受試者和教授的陣列,每個具有「分配的」變量設置爲0或1?

在其他API中,我已經看到,使用第一種方法處理分配給用戶的某些項目(API僅返回分配的用戶的ID,然後客戶端應用程序將這些ID與數組交叉引用包含所有用戶)。這是關於作業的最佳做法嗎?

+0

這兩個化學老師是否都教授化學課以上課? – flup

回答

1

我認爲前的方法,因爲以顯示主題/教授的簡明列表所需要的數據集相比非常小的後一種方法。如果你還沒有這樣做,我建議使用JSON作爲數據格式。這使得從客戶端JS調用此方法並創建有趣的表示非常容易。

根據主題/教授層次結構的初始列表,可以很容易地根據您的建議從另一個調用中將id匹配到整個集合,或者調用集合中的每個教授id並獲取有關該個人的詳細信息。如果您通過AJAX進行操作,您甚至可以並行運行它們:Parallel asynchronous Ajax requests using jQuery

1

如果REST API僅爲關係創建資源沒有任何意義。 這裏一個主題,教授一個類是資源。

主體可以分配一個或多個教授,但它並不需要包含其它教授的信息。從教授的角度來看,它應該只包含關於分配給它的主題的信息。

同時發送的名單,教授和學科(或類列表中又包含主題列表)。讓他們參考架構示例中提及的主題中的教授。同樣,爲什麼教授可以參考分配給他們的科目。

對於作業頁面。將其中一個列表作爲主要(小一個是個好主意),並用它來交叉引用另一個列表。

這種方式,如果在某個時候你想要關於一位教授的信息。教授名單中的一個元素/文檔/模型可以爲您提供所有需要的東西,反之亦然。

1

我想你應該在嘗試創建服務之前直接獲取對象模型。也許這是一種文化的東西(我是荷蘭人),但似乎某種名冊對象從模型中缺失,並且將成爲編寫該服務的資源。