我应该如何在ASP.NETCore中为具有多个URI端点的资源实现RESTAPI控制器?

c#

假设我正在对具有资源的博客 REST API 进行建模BlogPost并且Comment. 然后我为BlogPost资源添加以下 URI :

/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts

并且由于应该避免深度嵌套,因此我为所有Posts创建了单独的端点以获取它们的 Comment`s:

/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments

现在,由于Post可以从两个不同的 URI 访问资源,如下所示:

  • /api/posts?blogId=123
  • /api/blogs/123/posts

我应该如何在 ASP.NET Core API 项目中实现这个而不需要重复的代码?

例如。我应该在同一个控制器的同一个动作中实现这两个端点,还是应该将它分开在两个控制器中(例如处理/api/posts?blogId=123inPostsController/api/blogs/123/postsin BlogsController)?另外,我应该在两个端点上实现POST,PUTDELETE操作还是只选择一个作为主要 URI?

在我了解如何执行此操作后,是否可以将相同的方法推广到具有相同关系(例如PostComment)的其他资源?

回答

您应该为每个资源制作单独的控制器。这两个控制器可能共享的是 PostService 或其他获取帖子的机制。还请记住,如果您使用的是实体框架或其他一些 ORM,则 Posts 可能会通过关系公开在 Blog 对象上。因此,您的操作可能很简单:

public async Task<IActionResult> GetPostsForBlog(int blogId)
{
    return Ok(_context.Blogs.Find(blogId).Posts);
}


以上是我应该如何在ASP.NETCore中为具有多个URI端点的资源实现RESTAPI控制器?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>