2017-06-02 79 views
1

比方說,我有兩個對象,用戶和約會,用戶可能有一個或多個約會。在REST api中路由關係的最佳做法是什麼?

我很好奇,如果我應該允許API的消費者從約會控制器的用戶'過濾'。下面是調用我心目中的GET操作:

Users Controller 
GET 
api/Users 
api/Users/{userId} 
api/Users/{userId}/Appointments 
api/Users/{userId}/Appointments/{appointmentId} 

Appointments Controller 
GET 
api/Appointments/ 
api/Appointments/{appointmentId} 

我很好奇,如果它是落實有關約會控制器的用戶過濾器是一個好主意(良好實踐)......所以上面的電話會變成:

Appointments Controller 
GET 
api/Appointments/{userId:int?} 
api/Appointments/{appointmentId} 

在上面的調用中,我爲userId添加了一個可選的querystring參數,默認爲null。這將允許調用者獲取所有約會,或者通過userId獲取約會。

我想我不確定什麼被認爲是具有關係的對象的最佳實踐。

回答

0

如果你想簡單起見,我建議

用戶 GET

api/users 
api/user/{id} 
api/user/{id}/appointments 

約會 GET

api/appointments 
api/appointment/{id} 

而且從它的外觀api/Appointments/{userId:int?}不會因爲用戶讀好有約會和約會只有一個用戶。在端點api/Appointments/{appointmentId}的情況下,我不知道什麼是AppointmentId,但如果它是一個INT你就必須做一些時髦的東西來查找預約或是基於INT用戶,在這種情況下, ID可能是一樣的。

如果對象樹的深度太深,可能會使url結構混淆不清。

相關問題