深度对象路由的 Web API 最佳实践
Posted
技术标签:
【中文标题】深度对象路由的 Web API 最佳实践【英文标题】:Web API Best Practice for Deep Object Routes 【发布时间】:2015-09-23 15:16:13 【问题描述】:在使用 ASP.NET Web API 设计 RESTful API 时,我可以创建多个路由来检索相同的数据。但我应该吗?它被认为是有用的还是令人困惑的?
例如,如果我有 Parent > Child > Item 的对象关系,我可能有三个路由返回相同的单个项目:
api/parents/:parent/children/:child/items/:item api/children/:child/items/:item api/items/:item提供所有三个路线是否有用,还是应该限制为最简单的路线以避免混淆?在这方面有最佳实践吗?
【问题讨论】:
【参考方案1】:选择要使用的 URI/路由是出于期望的目的,而不是内容。用户是否有可能在不考虑特定父母的情况下寻找孩子?如果是,则在单独的根 URI 中提供数据,如果不是,则通过要求用户提供 parentId 来限制对子数据的访问。
URI api/children
将返回所有孩子,而不管他们的父母是谁,因此与api/parents/:parentId/children
相比,它只返回 :parentId 实例实际引用的孩子。结果将始终包含也可以使用api/children
获得的数据,但它带有附加信息,因为这些子代“属于”指定的父代。
在我看来,您的所有选择都是有效的,因为它们都有不同的目的。但是,我会避免为同一目的使用不同的 URI。
【讨论】:
这很有意义。感谢您的想法。【参考方案2】:如果用户有权访问最低级别的唯一标识符(在您的情况下为:item),那么他们应该调用
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
【讨论】:
以上是关于深度对象路由的 Web API 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
编写 Node.js Rest API 的 10 个最佳实践
设计 Node.js REST API 的 10 条最佳实践