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

Rest 深度对象路由的Web API最佳实践,rest,asp.net-web-api,restful-url,Rest,Asp.net Web Api,Restful Url,使用ASP.NET Web API设计RESTful API时,我可以创建多个路由来检索相同的数据。但我应该吗?它被认为是有用的还是令人困惑的 例如,如果对象关系为Parent>Child>Item,则可能有三条路由返回相同的单个项: api/parents/:parent/children/:child/items/:item api/children/:child/items/:item api/items/:item 提供这三条路线有用吗?还是应该只提供最简单的路线以避免混淆?在这方面

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

例如,如果对象关系为Parent>Child>Item,则可能有三条路由返回相同的单个项:

  • api/parents/:parent/children/:child/items/:item
  • api/children/:child/items/:item
  • api/items/:item

提供这三条路线有用吗?还是应该只提供最简单的路线以避免混淆?在这方面是否有最佳实践?

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

URI
api/children
将返回所有的子级,而不管它们的父级是什么,因此实现了另一个目的,而不是
api/parents/:parentId/children
,它只返回:parentId实例实际引用的子级。结果将始终包含也可以使用
api/children
获得的数据,但它包含附加信息,因为这些子项“属于”指定的父项


我认为你所有的选择都是有效的,因为它们都有不同的目的。但是,我会避免为相同的目的使用不同的URI。

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

api/items/:item

有关家长的信息是多余的/不相关的

我会说:

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

这很有道理。谢谢你的想法。