【发布时间】:2014-01-06 19:57:51
【问题描述】:
我正在评估一种可能的 REST API 设计,并希望就处理嵌套资源的方式寻求反馈或最佳实践。
考虑以下(JSON 表示的)数据模型,它是一个人为的图书库,类似于我正在查看的数据。请忽略没有图书馆等书籍可以存在的事实。
{ "library-name" : "foobar",
"rows" :
[
{"row-id":"1",
"shelves":
[
{"shelf-id":"1",
"books":
[
{
"book":
{"book-name":"abc", "author":"someone"}
}
]
}
]
}
]
}
然后假设可能的 REST API 设计是:
/library (the root API URI)
/library/{library-name}/
/library/{library-name}/{row-id}
/library/{library-name}/{row-id}/{shelf-id}
/library/{library-name}/{row-id}/{shelf-id}/{book-name}
对于 POST 操作,服务器将实现以下功能以允许:
- 添加新书,方法是直接对 /library/{library-name} 执行 POST,将书的所有详细信息编码到嵌套数据结构内的书架、行等(如图所示)。
- GET 操作将允许在每个追索级别。 GET 将返回完全嵌套的数据(例如,作为 JSON 数据返回给定图书馆的所有行/书架和书籍等)。
上面有一些权衡:
- 可以通过多个 URI 访问给定的图书资源。例如,对 /library/{library-name} 的 POST 可以创建一本书,对 /library/{library-name}/{row-id}/{shelf-id} 的 POST 也可以。在这种间接 POST 情况下,数据而不是 URI 标识了实际的目标子资源。这是 RESTfuL 吗?
- 允许在 POST/PUT 操作中通过其父资源处理资源在批量操作中很有用;节省往返次数。这种好处是以客户端和服务器必须处理的更复杂的数据结构和处理程序代码为代价的。
评论?我在这里缺少什么(我没有找到很多上面的例子,这让我觉得这不是一种常见的设计模式)?
【问题讨论】:
标签: rest design-patterns restful-url