繁体   English   中英

部分字段更新REST API

[英]Partial fields update REST API

有这个MongoBean:SuperBean

class SuperBean extends MongoBaseBean{
     private String id;
     private String title;
     private String parent;

     //And getters, setters   
}

需要编写一个更新API,该API能够执行部分属性更新。 在网络上以及从我的同龄人那里听到的常见方法是检查Null请求中的字段,如果不为null,则进行更新。 但是,如果更新请求将值更新为Null,该怎么办?

经过少量讨论,我们提出了三种方法:

  • 为Bean中的字段设置默认值。 因此,如果它在请求中没有$而不是非null父字段,则将考虑对其进行更新。

     class SuperBean extends MongoBaseBean{ private String id; private String title; private String parent = "$"; //And getters, setters } 
  • 让更新API实施接受地图。 将提取实际的bean,并且将更新请求映射中存在的所有字段。

     @Post public SuperBean updatePartial(Map<String,Object> dataObject) {} 
  • 让更新API接受包含2个映射的DTO。 一个包含旧值,另一个包含新值。 在仅当数据库包含在oldDataObj中发送的值的情况下才必须进行更新的情况下,这可能是有利的。 但这增加了有效载荷的大小。

      class SuperBeanUpdateDTO { private Map<String, Object> oldDataObj; private Map<String, Object> newDataObject; //getters, setters } @Post public SuperBean updatePartial(SuperBeanUpdateDTO updateDTO) {} 

选择这些方法之一应考虑哪些因素? 有没有更好的方法来解决此问题?

在我的项目中,我们通常选择与第二种方式相似的方式。 但不完全相同。

例如,在客户端,您有一个页面或一个视图来修改您的个人资料信息,包括namebirthdaygender ,尽管您只是修改了name值,但是当您单击save按钮时,它仍然会将数据发送到服务器包括“ birthday和“带有name gender字段,但只需保持其旧值即可。 服务器API将直接更新数据库中的这三个值,而不检查其值是否更改。

如果您有另一个页面或视图来修改配置文件的其他部分(例如密码),则需要在客户端中添加新方法,在服务器中添加新API。 API URL PATCH /reset_password ,并且发送的数据应包含old_passwordnew_password字段。

PS:
1.我们使用PUTPATCH更新资源,而不是POSTPOST用于创建新资源。 2.当您更新资源时,在上面的示例中,API喜欢PATCH /profiles/:id (其他人的个人资料)或PATCH /profile (您自己的个人资料),因此发送的数据不再需要id字段,它包含在您的API URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM