2012-10-03 83 views
0

在两种或多种不同方式关联相同RESTful资源(模型)的情况下,与其他基于REST的资源,如:当存在多个与不同名称关联的同一关联模型/表的多个关联时的嵌套资源路径

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

包括“研修生”或在URL路径“培训”似乎并不是正确的,因为它们不是真正的资源(仅TrainingSession与劳动者):

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

但是,使用 “雇员” 太含糊,可能意味着两种:

  • /employees/1/training_sessions

会建议这些路由/路径,为什么呢?

回答

2

实际上使用实习生和培训师是没有错的。

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

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

编辑:以下是哲学问题,因此很大程度上是有争议的。

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

0

我会将培训课程视为另一个资源,并根据搜索参数searchType和employeeId搜索培训课程。
因此
/trainingsessions?searchby=trainer&employeeId=xyz应该为培训师提供会话
/trainingsessions?searchby=trainee&employeeId=xyz应该为培训对象提供培训。