对于一个项目,我们有一个名为Item
的类。
此Item
具有ID
,Title
,Description
和MediaFile[]
。现在,我们有了一个编辑功能,可以在其中更改标题,描述并添加/删除MediaFile
。通过向后端发布文件来添加MediaFile
,该文件将返回Filename
和Id
。
当我们想放置更改后的Item
时,我们的后端希望有一个不同的模型,仅包含ID
,Title
,Description
和一个包含MediaFile的数组id的Guid[]
。这要求我们的前端从MediaFile[]
到Guid[]
进行额外的“转换”。首先发送带有GET的完整更新的Item
是不是更有意义?
简而言之: 对于类中的集合,您应该发送完整的类数组还是仅包含类ID的数组?
答案 0 :(得分:0)
我认为没有单一的观点,像往常一样,这是一种交易……一切都取决于您的需求和特定情况。通常,正如您所提到的,可以通过两种技术来实现相同的结果:
前一种方法充当单个操作,可确保更高的一致性,但具有大量后端调用的所有缺点:如果失败,则很难确定整个请求是否失败或部分成功。此外,如果此批处理需要花费合理的时间-用户将一直处于阻塞状态,直到请求结束为止(我的意思是您无法使用进度报告来构建UI)。要么全有要么全无
一个字母(多个请求)会为关系添加单独的资源并产生额外的后端调用,但更易于使用,并且UI更具责任感。您可以通知用户批处理操作的状态和进度,此外,可以逐一处理失败(例如,应用一些重试策略)。
换句话说:
依赖资源方法:
PUT /items Body: {... MediaFile: [...]}
多次通话:
PUT /items Body: {...}
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurse1 }
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurse2 }
...
PUT /items/{itemId}/mediafiles/{mediaFileId} Body:{ ... MediaFileReosurseN }