在REST API中路由关系的最佳实践是什么?

时间:2017-06-02 18:55:34

标签: c# asp.net-web-api routing attributerouting

假设我有两个对象,即用户和约会,其中用户可能有一个或多个约会。

我很好奇我是否应该允许API的消费者过滤'来自Appointments控制器的用户。以下是我对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控制器上为用户实现过滤器是一个好主意(好的做法)......所以上面的调用将成为:

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

在上面的调用中,我为userId添加了一个可选的querystring参数,默认为null。这将允许呼叫者获得所有约会,或者通过userId获得约会。

我想我不确定什么是关系对象的最佳实践。

1 个答案:

答案 0 :(得分: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可以是相同的。

对于对象树的深度过深可能会使网址结构变得混乱。