当具有与同一关联模型/表的不同名称的多个关联时的嵌套资源路径

时间:2012-10-03 18:06:37

标签: rest

在相同的RESTful资源(模型)以两种或更多种方式与另一个RESTful资源相关联的情况下,无法提供良好的URL路径,例如:

  • 指定一个URL路径,该路径直观地表示查询与某个培训师关联的所有培训课程实例的请求,其中TrainingSession模型具有与Employee模型关联的trainer_id。
  • 指定一个URL路径,该路径直观地表示查找与某个受训者相关的所有培训课程实例的请求,其中TrainingSession模型的trainee_id也是Employee模型的关联。

在URL的路径中包含“受训者”或“培训师”似乎不正确,因为它们不是真正的资源(仅限TrainingSession和Employee):

  • /trainees/1/training_sessions
  • /trainers/1/training_sessions

但是,使用“员工”太模糊,可能意味着:

  • /employees/1/training_sessions

您对这些路线/路径有什么建议?为什么?

2 个答案:

答案 0 :(得分:2)

实际上,使用学员和培训师并没有错。

您的受训人员和培训师都可以映射到员工控制器功能,然后使用提供的ID查找受训者/培训师数据。我不明白为什么你不能这样做。它只是简单的智能网址指导。

如果您必须单独存储有关受训人员和培训师的信息,那么他们需要自己的模型。但是,如果TrainingSession具有直接映射到员工ID的实习生ID和培训师ID,并且您不必存储关于受训者和培训师的任何其他内容,我不明白为什么所提到的方法不可用。

编辑:以下是哲学问题,因此在很大程度上值得商榷。

我觉得REST原则适用于API用户。因此,只要用户看到有实习资源和培训师资源并且可以操纵它,那就是REST。你如何在里面实现,比如使用MVC是你的选择。一个好的方法是使用MVC原则,但原则是指导原则,没有黄金法则可以适用于所有情况。我认为创建虚拟资源很好,他们不必映射到自己的模型/控制器。

答案 1 :(得分:0)

我会将培训课程视为另一种资源,您将根据搜索参数searchType和employeeId搜索培训课程。
因此@GET/trainingsessions?searchby=trainer&employeeId=xyz应为培训师提供会议/trainingsessions?searchby=trainee&employeeId=xyz应为受训人员举办会议。