0

當我想傳遞具有對另一個模型的引用的模型時,RESTful API服務的「良好實踐」是什麼?像:傳遞具有依賴關係的模型以休息API服務

class ClassModel 
{ 
int Id 
int Number 
List<StudentModel> Students 
} 

class StudentModel 
{ 
int Id 
string Name 
string Surname 
ClassModel CurrentClass 
} 

,並同時創造新的學生:POST .../api/students/ 我應該通過在​​對象整個ClassModel相關聯的對象或只類Id,並獲得服務端此對象嗎?

回答

0

最好的做法是隻傳遞您所要執行的任何操作所需的數據。

如果您嘗試遵循標準,那麼您確實應該使用POST來創建新數據並更新PUT。

現在,您如何處理數據取決於您的業務規則。起初看,我會這樣說:

如果你想創建一個學生,那麼只使用所需的數據初始註冊...名稱,聯繫信息,地址,無論你需要什麼。 然後你會有類似EnrollStudentInClass的東西,那就是你執行鏈接的地方。如果所有完成的調用都是鏈接操作,那麼您不需要傳遞類的整個數據圖,只需要用於唯一標識您所在類的數據,在本例中爲Id。

這有助於保持很好的分離。但是,如果您有一項業務要求,即不能將學生註冊到至少一個班級就無法創建學生,那麼您也會傳遞班級信息,並在一次通話中完成所有這些操作。

雖然這裏最重要的事情是保持儘可能簡單,並且不要一次性做太多,除非你真的需要。

+1

左右切換。插入後,把更新。這也表明 – Nkosi

+0

問題的主要基於觀點的性質,謝謝 –

+0

@Nkosi我沒有看到'POST' *作爲插入*可能是一個意見......這是RESTful API中的事實標準設計。此外,'PUT' /'PATCH'更新... –

0

在創建學生時,其內部的任何關聯資源將作爲參考給出,因爲您不會使用該資源來創建學生來創建類。

  • POST /students將創建學生。
  • POST /classes將創建類。

如果你想創建一個學生,其關聯到現有的類,你可以使用POST動詞請求發送到/students和實體將如下所示:

{ "name": "Matías", "surname": "Fidemraizer", "class": { "id": 38 } } 

在另一方面,如果你需要創建一個類,你將發送一個POST請求到/classes,它將會收到一個201 Created狀態碼的響應,它還會帶有一個Location包含創建的資源URI的頭(fe Location: /classes/2)。

也許您應該設計自己的模型和服務,以避免加載關聯並使用引用,因爲即使您的業務層不需要加載類以將其關聯到給定學生。

此外,您的ClassModel可能會提供一個Load方法來加載整個模型,並且這太容易了,因爲您只需要通過其標識符獲取模型並填充整個類中的其餘屬性!