放置 API 个端点的控制器

Which controller to place API endpoints

在 .Net Core 2.1 Web API 中,假设我有两个模型:

Student
School

和两个控制器:

StudentsController
SchoolsController

API 公开这些端点以访问这些资源:

/api/students
/api/students/{id}
/api/students/{id}/school

/api/schools
/api/schools/{id}
/api/schools/{id}/students

我有两个问题:

  1. 应该

    /api/schools/{id}/students

进入 SchoolsController 还是 StudentsController?我很想把它放在 SchoolsController 下,因为路线表明这是关于一所学校的。但是,它是 returns 学生,所以也许在 StudentsContoller 中提供更好的服务?或者我应该创建一个新的 SchoolsStudentsController?

  1. /api/schools{id}/学生

如果公开为:

可能会更好
/api/students?schoolId={id}

我觉得第一个选择更多 "RESTful",但也许第二个选择也不错,因为我所做的只是返回一个学生列表,过滤到特定学校。如果我选择第二个选项,那么毫无疑问会将代码粘贴到哪个控制器中(逻辑上它会进入 StudentsController)

我不确定 RESTful 架构中是否有关于此的最佳实践...谢谢

这里没有硬性规定。这完全取决于你。无论您将操作放置在何处,您都可以通过属性路由为它们分配它们应有的任何路由。很可能,您会将它们分解成单独的控制器,只是为了最大限度地减少任何给定控制器中的代码量,但如果您只处理少量路由,那么将它们全部驻留在同一个控制器中可能完全没问题。同样,这是一个判断电话;只有你能做的。