0

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

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

在 URL 的路径中包含“trainees”或“trainers”似乎是不对的,因为它们不是真正的资源(只有 TrainingSession 和 Employee 是):

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

但是,使用“员工”过于含糊,可能意味着:

  • /employees/1/training_sessions

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

4

2 回答 2

2

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

您的学员和培训师两个网址都可以映射到员工控制器功能,然后使用提供的 ID 查找学员/培训师数据。我不明白你为什么不能这样做。它只是智能 url 定向。

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

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

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

于 2012-10-03T18:12:13.023 回答
0

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

于 2012-10-03T18:26:53.457 回答