2017-06-02 66 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结构混淆不清。

相关问题