我想知道当您拥有包含子资源列表的资源时,哪个是最佳实践。例如,您拥有资源作者,其中包含名称,ID,生日和List书籍等信息。这本书目录只与作者有关。所以,你有以下情形:从子资源列表中更新/添加/删除项目的REST设计
- 你想要一本新书添加到图书清单
- 你想从列表中
- 更新一本书的名字要从删除一本书列表
SOLUTION 1
我搜遍这是正确的设计,我发现了多种方法。我想知道是否有标准的设计方法。我认为设计的书上说来有以下几种方法:
- 补充:
POST /authors/{authorId}/book/
- 更新:
PUT /authors/{authorId}/book/{bookId}
- 删除:
DELETE /authors/{authorId}/book/{bookId}
解决方案2
我的解决方案是只有一个PUT方法完成所有这三件事情,因为书籍列表只存在于对象作者中,而您是实际的更新作者。喜欢的东西:
PUT /authors/{authorId}/updateBookList
(发送author对象内部的整体更新的图书列表)
我发现在我的方案的多个错误。例如,从客户端发送更多数据,在客户端拥有一些逻辑,对API进行更多验证,并且还依赖客户端具有最新版本的Book List。
我的问题是:这是否反模式?
情况1.在我的情况下,我的API使用另一个API,而不是数据库。使用的API只有一个“updateBookList”方法,所以我猜测在我的API中复制这种行为也比较容易。这是否正确?
情况2.但是,假设我的API会使用数据库,它会更适合使用SOLUTION 1吗?
此外,如果你可以提供一些文章,书籍,你可以找到类似的信息。我知道这种设计不是用石头写的,但有些指导方针会有所帮助。 (例如:REST API Design Rulebook)
如果这是一个真正的问题,而不是作业,请记住,书籍可以有多个作者。一本书应该是真正的顶级资源。 –
这是一个真正的问题,但在我的情况下,书籍列表只属于一个作者。例如,如果您删除作者,那些书籍将不再存在。 – green
现在。如果业务需求发生变化,您可能会冒API风险。当然,只有你可以知道这有多可能。 –