我应该如何在ASP.NETCore中为具有多个URI端点的资源实现RESTAPI控制器?
c#
假设我正在对具有资源的博客 REST API 进行建模Blog,Post并且Comment. 然后我为Blog和Post资源添加以下 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,PUT和DELETE操作还是只选择一个作为主要 URI?
在我了解如何执行此操作后,是否可以将相同的方法推广到具有相同关系(例如Post和Comment)的其他资源?
回答
您应该为每个资源制作单独的控制器。这两个控制器可能共享的是 PostService 或其他获取帖子的机制。还请记住,如果您使用的是实体框架或其他一些 ORM,则 Posts 可能会通过关系公开在 Blog 对象上。因此,您的操作可能很简单:
public async Task<IActionResult> GetPostsForBlog(int blogId)
{
return Ok(_context.Blogs.Find(blogId).Posts);
}
THE END
二维码