asp.net-core - 基于聚合的 ASP.NET Core Web API 拆分控制器
问题描述
在我的 API 项目中,我目前有 1 个控制器,其语法如下:
抽象基础控制器
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status406NotAcceptable)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public abstract class BaseApiController : ControllerBase
{
// ....
}
测试API控制器
public class TestApiController : BaseApiController
{
// Parent action methods
[HttpGet]
[HttpPost]
...
// Child action methods
[HttpGet("{test:guid}/child")]
[HttpGet("{test:guid}/child/{id:guid}")]
...
}
这为我们提供了以下网址:
http://localhost/api/v1.0/test
http://localhost/api/v1.0/test/1
http://localhost/api/v1.0/test/1/child
http://localhost/api/v1.0/test/1/child/1
问题
如何在不限制 URL 的情况下将控制器拆分为多个文件,但要获得更清晰的概览。
因此,一个控制器用于所有测试操作,另一个控制器用于所有子操作。
解决方案
我不是从这里丰富的控制器经验中谈论的(我已经做过一些),但我想你会发现控制器就是控制器 - 因为没有简单的方法来拥有一个控制器路由不是1:1。
但是,如果你想让控制器更易于管理,你可以让它们尽可能精简,并将大量代码放入控制器调用的类中。
或者,与其尝试拆分/分解控制器而不是路由,不如重新设计整体 API 设计/结构,以便拥有更多控制器和路由。这里想到了接口隔离原则(是的,它源于 OO,但该原则仍然适用)。
归根结底,您会调用由路由定义的 API,然后调用控制器 - 只要 API 足够明智、直观和适合目的。
推荐阅读
- amazon-web-services - 撤消覆盖我的文件的 S3 cp 命令
- awk - 用特定条件替换列的正负数
- webrtc - 使用 webrtc 的屏幕共享应用程序连接不好
- c++ - std::ranges::elements_view 的逆
- hadoop - 如何获取 Hive 中现有物化视图的 CREATE 查询?
- python - 蟒蛇 3.6.9 。ImportError:没有名为 setuptools_rust 的模块和命令“python setup.py egg_info”失败,错误代码为 1
- c# - 如何将文本插入字符串中的占位符?
- python - 具有英特尔 T265 深度的 OpenCV
- javascript - 在 Vue 中使用 promise,我如何从 API 获取数据?
- python - Python 字典理解 - 不可散列的类型:dict