在单个POST中创建复杂对象是RESTful吗?

aw *_*rud 7 rest restful-architecture

我有一个用户创建个人记录的表单.每个人都可以有几个属性 - 身高,体重等.但他们也可以有相关数据列表,如兴趣,喜欢的电影等.

我有一个表格,收集所有这些数据.对我来说,似乎我应该在一个请求中POST所有这些数据.那是RESTful吗?我的阅读建议应该在单独的POST请求中添加兴趣,喜爱的电影和其他列表.但我不认为这是有道理的,因为其中一个可能会失败,然后将部分插入人员,它可能会错过他们的兴趣或喜欢的电影.

Pau*_*ier 5

我会说这完全取决于依赖数据的可寻址性和唯一性。

如果您的用户关联数据依赖于用户(即“独特的”字符串,例如表示电影(未验证)名称的字符串等属性),则应将其包含在用户的 POST 创建中表示; 但是,如果数据独立于用户(其中​​数据可以独立于用户寻址,例如参考,例如来自一组电影的电影),则应该独立添加它。

这背后的原因是,与原始 POST 捆绑的引用添加意味着事务性;也就是说,如果另一个用户在客户端选择“最喜欢的”电影和 POST 通过之间删除了电影引用,则用户添加将(按照该设计应该)失败,而如果“最喜欢的”电影不是关联的,而只是一个属性,没有什么可以失败的(属性(大概)不能被第三方失效)。

同样,这非常符合您的特定需求,但我支持部分插入并指示失败。如果您真的不想允许部分插入,那么处理此类事情的正确方法是仅在后端实现事务;它们是真正处理在过程中删除关键相关资源的情况的唯一方法。


Dir*_*irk 2

我认为在一个请求中添加所有数据没有问题,只要它与主要资源(即您案例中的人)固有相关。有兴趣的话,收藏。电影等本身就是资源,也应该这样处理。

  • 在这种情况下,我会将 Person 视为资源。如果一部电影是你想要单独处理的东西(例如通过某个ID)并且只是从一个人那里引用它(例如从列表中选择),我认为电影应该有自己的创建、删除等方式,因此可以被视为单独的资源。由于它只能存在于 Person 的上下文中,因此我认为它也可以在一个请求中处理。 (2认同)