假设我正在为具有资源的博客 REST API 建模 Blog
, Post
和 Comment
.
然后我为 Blog
添加以下 URI和 Post
资源:
/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts
并且由于应避免深度嵌套,我为所有 Post
创建了单独的端点s 为了获得他们的评论:
/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments
现在,自 Post
可以像这样从两个不同的 URI 访问资源:
- /api/posts?blogId=123
- /api/blogs/123/posts
我应该如何在没有不必要的代码重复的情况下在 ASP.NET Core API 项目中实现它?
例如。我应该在同一个 Controller 的相同操作中实现这两个端点,还是应该在两个 Controller 中将其分开(例如,处理 /api/posts?blogId=123
中的 PostsController
和 /api/blogs/123/posts
中的 BlogsController
)?
另外,我应该实现 POST
吗? , PUT
和 DELETE
在两个端点上执行操作还是只选择一个作为主要 URI?
在我了解如何执行此操作后,是否可以将相同的方法推广到具有相同类型关系的其他资源(例如 Post
和 Comment
)?
最佳答案
您应该为每个资源制作单独的 Controller 。这两个 Controller 可能共享的是潜在的 PostService 或其他获取帖子的机制。还要记住,如果您使用 Entity Framework 或其他一些 ORM,帖子可能会通过关系暴露在博客对象上。因此,您的操作可能很简单:
public async Task<IActionResult> GetPostsForBlog(int blogId)
{
return Ok(_context.Blogs.Find(blogId).Posts);
}
关于c# - 我应该如何在 ASP.NET Core 中为具有多个 URI 端点的资源实现 REST API Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66872871/