如果必须在提交表单时在同一数据库表中创建和修改记录,该如何设计其余的API?

时间:2019-03-31 15:53:22

标签: rest spring-boot

我有react app,可以修改已经添加的项目,也可以添加新的项目。然后,提交表单后,我想修改现有表单并在数据库中创建新记录。我应该在表单提交时对现有的进行PUT调用,对新的进行POST调用吗?

当前,我正在对服务器进行POST调用,并检查接收到的对象是否具有主键,然后在数据库中对其进行更新,否则创建新记录。

但是我想我没有遵循其余原则,因为我在同一REST调用中更新和创建记录。

@Post
createOrModifyObject(List<Object> obj) {
if(obj.getId() != null) {
    database.update();
}else{
    database.create()
}
}

我需要在同一呼叫中创建和更新记录。我应该如何处理?我应该单独调用创建和更新记录吗?

3 个答案:

答案 0 :(得分:0)

来自https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT

  

HTTP PUT请求方法创建一个新资源或用请求有效负载替换目标资源的表示形式。

从REST的角度来看,在这种情况下,只要使用PUT,就可以只使用一种HTTP方法

答案 1 :(得分:0)

最适合您的解决方案是创建另一种更新资源的方法。为什么?因为:

  1. REST设计中的最佳实践是将资源的创建映射到POST方法,将现有资源的更新映射到PUT方法。
  2. “单一责任原则”也适用于方法,因此您不应拥有负责创建和更新资源的单一方法。您应该将这些责任分为两种方法。
  3. 通过将职责分解为多种方法,可以使代码解耦。因此,如果您在当前方法中放入错误,则会影响实体的创建和实体的更新。

答案 2 :(得分:-1)

您可以创建POST请求:

something:here / goes / user->此用户将创建一个新用户。

还有一个PUT请求:

某事:此处/转到/用户/有关用户的信息  ->这将更新一个用户。

我会处理其他请求。这将使您的代码更简单,并避免在一个请求中嵌套if-else-then。