首页 > 解决方案 > 放置 API 端点的控制器

问题描述

在 .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 下,因为路线表明这是关于一所学校的。但是,它返回学生,所以也许它在 StudentsContoller 中提供更好的服务?或者我应该创建一个新的 SchoolsStudentsController 吗?

  1. /api/schools{id}/students

如果将其暴露为以下内容可能会更好:

/api/students?schoolId={id}

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

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

标签: resturlcontrolleruriasp.net-core-webapi

解决方案


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


推荐阅读