REST API POST - 检查每个嵌套对象是否存在。如果不是,请创建新的。如果是,请返回现有对象

时间:2016-08-09 13:58:38

标签: python django rest django-rest-framework api-design

我对 RESTful API设计实践和寻求帮助有点新鲜。我使用的数据模型详细说明了包含嵌套对象列表(例如章节)的顶级对象(例如Book)。
每个章节都有自己的权利,并且simple_name字段设置为unique=True(即仅一个章节 Chapter.simple_name =" ch_01"可能存在)。

  

场景:用户POST一本书(" myBook_v1"),其中包含章节," ch_01"," ch_02"和& #34; ch_03&#34 ;.然后用户编辑他们的书和   第二天发布" myBook_v2"包含章节," ch_01"," ch_02",   " ch_03",和" ch_04" 。假设章节" ch_01"," ch_02",   " ch_03"与原来的POST没有变化。

目前,由于 simple_name 必须是唯一的,因此第二个POST不会传递唯一性验证,并且会向用户返回错误响应。

问题:以下实施是否符合REST设计原则?而且,最重要的是,这是一个很好的(安全的)设计选择吗?

实施:在预订POST时,请检查每个 Chapter.simple_name 的唯一性。如果数据库中已存在 Chapter.simple_name ,则跳过创建。如果它不存在,请创建新章节。返回完整的持久书籍,其中包含新创建的章节和现有的章节。决定创建新的或使用现有的唯一标准是数据库中的章节是否已存在用户指定的 simple_name

1 个答案:

答案 0 :(得分:0)

这里的想法是通过删除相关的验证器来删除唯一性约束,然后自己处理添加/更新/删除(参见Unique validation on nested serializer on Django Rest Framework