【问题标题】:HTTP method for doing all the CRUD operations in a single request在单个请求中执行所有 CRUD 操作的 HTTP 方法
【发布时间】:2014-06-18 04:24:27
【问题描述】:

我正在开发一个 Spring REST Web 服务。我刚刚阅读了所有 HTTP 方法的用法。

  • POST 创建新资源。
  • GET 检索资源。
  • PUT 更新现有资源。
  • DELETE 删除资源。

我有一个 Web Service 方法,它执行所有 CRUD 操作。那么在这种情况下哪种 HTTP 方法最好?

【问题讨论】:

  • PUT 更像是“替换”,PATCH 仅用于更新资源。 PUT 用于 PUT 一个完整的新版本。

标签: spring web-services http rest


【解决方案1】:

这并不是 REST 真正应该的工作方式。您应该使用多个请求来执行多项操作。除非您真的需要类似事务的行为,否则只需在多个请求中执行,这应该不是问题。

也就是说,您可以使用您想要进行的更改来修补根资源(如果您真的想要这样做。类似:

PATCH /data_objects/

[ { "action":"add",
    "data":<data_for_new_object>
  },
  { "action":"update",
    "data":{
      "id":666,
      "updates":[
        { "key":"age","value":50 },
        { "key":"color","value":"blue"}
      ]
     }
  },
  { "action":"delete",
    "data":{
      "id":69
    }
  }
]

这只是表示您想要在请求中进行的所有更改(用于修改根资源)的一种可能方式(可能不是那么好)。

【讨论】:

    【解决方案2】:

    不要导出单个方法来执行所有 CRUD 操作。

    为每个 CRUD 声明 4 个新方法。每个方法都调用原始的 Web 服务方法。

    分离可以带来额外的好处,例如缓存 GET 响应和不缓存 POST/PUT/DELETE。

    【讨论】:

    • 我将从客户端调用 Web 服务方法。我必须根据相同方法的输入值执行 CRUD 操作。如果我为每个 CRUD 声明 4 个新方法,如何我会从请求的 Web 服务方法中调用这些方法吗?
    • 所有 CRUD 操作都发生在一个请求中吗?如果是,请使用 POST 方法。
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多