我有反应应用程序,我可以修改已经添加的项目,也可以添加新的项目。然后在提交表单后,我想修改现有的表单并在数据库中创建新记录。我应该在提交表单时对现有 PUT 调用并针对新调用 POST 调用吗?
目前,我正在对服务器进行POST调用并检查收到的对象是否具有主键,然后在数据库中对其进行更新,否则创建新记录。
但我认为我没有遵循休息原则,因为我在同一个休息调用中更新和创建记录。
@Post
createOrModifyObject(List<Object> obj) {
if(obj.getId() != null) {
database.update();
}else{
database.create()
}
}
我需要在同一调用中创建和更新记录。我应该如何处理它?我是否应该单独调用创建和更新记录?
从 https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT:
HTTP PUT 请求方法创建新资源或将目标资源的表示形式替换为请求有效负载。
从 REST 的角度来看,在这种情况下只使用 1 个 HTTP 方法就可以了,只要它是 PUT
最适合您的解决方案是创建另一种更新资源的方法。为什么?因为:
- REST 设计的最佳实践是将资源的创建映射到 POST 方法,并将现有资源的更新映射到 PUT 方法。 单一
- 责任原则也适用于方法,因此不应使用具有创建和更新资源责任的单一方法。应将这些责任拆分为两种方法。
- 通过将响应性拆分为多个方法,可以将代码解耦。因此,如果您在当前方法中放置一个错误,您将同时影响实体的创建和实体的更新。
您可以创建 POST 请求:
something:here/goes/user -> 这将创建一个新用户。
和一个 PUT 请求:
something:here/goes/user/info-about-user -> 这将更新用户。
我会在不同的请求中处理。这将使您的代码更简单,并避免在一个请求中使用嵌套if-else-then。