深度对象路由的Web API最佳实践

时间:2015-09-23 15:16:13

标签: rest asp.net-web-api restful-url

使用ASP.NET Web API设计RESTful API时,我可以创建多个路径来检索相同的数据。但是我应该吗?它被认为有用还是令人困惑?

例如,如果我的父对象关系>小孩>项目,我可能有三条路线返回相同的单项:

  • API /父母/:家长/孩子/:儿童/项目/:项目
  • API /儿童/:儿童/项目/:项目
  • API /项目/:项目

提供所有三条路线是否有用,还是应该限制在最简单的路线以避免混淆?在这方面有最好的做法吗?

2 个答案:

答案 0 :(得分:3)

选择要使用的URI /路由是预期目的而非内容。用户是否有可能或可以在没有特定父母的情况下寻找孩子?如果是,则在单独的根URI中提供数据,如果不是,则通过要求用户提供parentId来限制对子数据的访问。

URI api/children将返回所有子级而不管其父级,因此实现了除api/parents/:parentId/children之外的另一个目的,它只返回子节点:parentId实例实际上有引用。结果将始终包含也可以使用api/children获取的数据,但它包含其他信息,因为这些孩子属于'到指定的父母。

在我看来,所有选项都是有效的,因为它们都有不同的用途。但是,我会避免为同一目的使用不同的URI。

答案 1 :(得分:0)

如果用户有权访问最低级别的唯一标识符(在您的情况下为:item),那么他们应该只调用

API /项目/:项目

有关父母的信息将是多余的/不相关的。

我会去:

api/parents
api/parents/:parentid
api/parents/:parentid/children
api/children
api/children/:childid
api/children/:childid/items
api/items
api/items/:itemid