Web API 深度对象路由的最佳实践
Web API Best Practice for Deep Object Routes
在使用 ASP.NET Web API 设计 RESTful API 时,我可以创建多个路由来检索相同的数据。但是我应该吗?它被认为有帮助还是令人困惑?
例如,如果我有父 > 子 > 项目的对象关系,我可能有三个路由 return 相同的单个项目:
- api/parents/:parent/children/:child/items/:item
- api/children/:child/items/:item
- api/items/:项目
提供所有三种路线是否有用,还是应该仅限于最简单的路线以避免混淆?有这方面的最佳实践吗?
选择使用哪个 URIs/routes 取决于预期的目的,而不是内容。用户是否可能或可能会在没有特定 parent 的情况下寻找 child?如果是,则在单独的根 URI 中提供数据,如果不是,则通过要求用户提供 parentId 来限制对 child 数据的访问。
URI api/children
将 return 所有 children 而不管他们的 parents,因此实现了 api/parents/:parentId/children
之外的另一个目的,后者只会 return children :parentid 实例实际上有一个引用。结果将始终包含也可以使用 api/children
获得的数据,但它携带额外的信息,因为这些 children 'belong' 到指定的 parent.
我认为你所有的选择都是有效的,因为它们都有不同的目的。但是我会避免为同一目的使用不同的 URI。
如果用户有权访问 lowest-level 唯一标识符(在您的情况下为:item),那么他们应该调用
api/items/:项目
有关 parent 的信息将是多余的/不相关的。
我会去:
api/parents
api/parents/:parentid
api/parents/:parentid/children
api/children
api/children/:childid
api/children/:childid/items
api/items
api/items/:itemid
在使用 ASP.NET Web API 设计 RESTful API 时,我可以创建多个路由来检索相同的数据。但是我应该吗?它被认为有帮助还是令人困惑?
例如,如果我有父 > 子 > 项目的对象关系,我可能有三个路由 return 相同的单个项目:
- api/parents/:parent/children/:child/items/:item
- api/children/:child/items/:item
- api/items/:项目
提供所有三种路线是否有用,还是应该仅限于最简单的路线以避免混淆?有这方面的最佳实践吗?
选择使用哪个 URIs/routes 取决于预期的目的,而不是内容。用户是否可能或可能会在没有特定 parent 的情况下寻找 child?如果是,则在单独的根 URI 中提供数据,如果不是,则通过要求用户提供 parentId 来限制对 child 数据的访问。
URI api/children
将 return 所有 children 而不管他们的 parents,因此实现了 api/parents/:parentId/children
之外的另一个目的,后者只会 return children :parentid 实例实际上有一个引用。结果将始终包含也可以使用 api/children
获得的数据,但它携带额外的信息,因为这些 children 'belong' 到指定的 parent.
我认为你所有的选择都是有效的,因为它们都有不同的目的。但是我会避免为同一目的使用不同的 URI。
如果用户有权访问 lowest-level 唯一标识符(在您的情况下为:item),那么他们应该调用
api/items/:项目
有关 parent 的信息将是多余的/不相关的。
我会去:
api/parents
api/parents/:parentid
api/parents/:parentid/children
api/children
api/children/:childid
api/children/:childid/items
api/items
api/items/:itemid