rest - 放置 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
我有两个问题:
应该
/api/schools/{id}/students
进入 SchoolsController 或 StudentsController?我很想把它放在 SchoolsController 下,因为路线表明这是关于一所学校的。但是,它返回学生,所以也许它在 StudentsContoller 中提供更好的服务?或者我应该创建一个新的 SchoolsStudentsController 吗?
将
/api/schools{id}/students
如果将其暴露为以下内容可能会更好:
/api/students?schoolId={id}
我觉得第一个选择更“RESTful”,但也许第二个选择也不错,因为我所做的只是返回一个学生列表,过滤到特定学校。如果我选择第二个选择,毫无疑问将代码粘贴到哪个控制器中(逻辑上它会进入 StudentController)
我不确定 RESTful 架构中是否有任何关于此的最佳实践...谢谢
解决方案
这里没有硬性规定。这完全取决于你。无论您将操作放置在何处,您都可以通过属性路由为它们分配它们应该具有的任何路由。很可能,您会将它们分解为单独的控制器,以尽量减少任何给定控制器中的代码量,但如果您只处理少数路由,则将它们全部驻留在同一个控制器中可能会非常好。同样,这是一个判断电话;只有你能做的。
推荐阅读
- c# - 定义新对象时有什么方法可以使用特殊字符
- woocommerce - woocommerce的这种发布方法在哪里?
- java - Quartz 调度程序产生“ResultSet is closed”异常
- python-3.x - 如何在 docker 文件中包含 Python 包?
- node.js - 如何实现在 fcm 上创建新文档时触发推送通知的功能?
- android - Android Q 上仅 DNS 的 VPN 服务
- python - 从数据框中提取具有列名的非零数据
- sql - 如果值已经存在则更新 vb 以访问数据库
- python - Tensorflow:sess.run([x]) 不起作用,但 sess.run([y]) 使用相同的 feed_dict
- android - 没有波纹时如何使用圆形蒙版添加自定义彩色圆圈波纹