我是RESTful网络服务的新手,我有以下疑问。我正在开发一个Spring MVC应用程序(但这并不重要,因为我的疑问与REST概念更相关)。
我有这个域类:
@Entity
@Table(name = "accomodation_media")
public class AccomodationMedia {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
//@Column(name = "accomodation_fk")
//private Long idAccomodation;
@ManyToOne
@JoinColumn(name = "accomodation_fk", nullable = false)
private Accomodation accomodation;
@Column(name = "is_master")
private boolean isMaster;
@Lob
@Column(name = "media")
private byte[] media;
private String description;
private Date time_stamp;
.................................................................
.................................................................
GETTER AND SETTER METHODS
.................................................................
.................................................................
}
表示记录到我数据库的 room_media 表中。
然后我有一个处理HTTP Requesto的控制器方法: / Accomodation / {accomodationId} / accomodationMedia / {mediaId} 。
这样的事情:
@RequestMapping(value = "/{accomodationId}/accomodationMedia/{newMasterImgId}", method = RequestMethod.XXXX)
public ResponseEntity<String> changeMasterImg(@PathVariable Long accomodationId,
@PathVariable Long newMasterImgId) throws Exception {
accomodationMediaService.changeMasterImg(accomodationId, newMasterImgId);
return ResponseEntity.ok("Master Image cambiata");
}
此方法调用 changeMasterImg(),它基本上从数据库中检索 AccomodationMedia 实例,更改 isMaster 字段的值并更新它
所以基本上这个方法处理部分更新,因为它现在插入一个全新的对象,但检索一个对象,修改它并更新它。
所以我怀疑是:
1)根据 RESTful 标准,我是否需要使用 POST 作为更新 AccomodationMedia 资源的请求?我已经读过,也许我也可以使用 PATCH 进行部分更新。使用 POST 和 PATCH Http方法有什么区别?在这种情况下最好的是什么?
2)如果成功更新,我将返回什么样的状态代码响应?这里: Best practice for partial updates in a RESTful service
它说 303 但 303 应该是重定向消息而不是 200 这意味着操作没问题?
答案 0 :(得分:2)
作为一般规则,CRUD操作应遵循以下模式:
POST: Create
PUT: Update
GET: Read
DELETE: Delete
如果操作成功,我会返回2xx代码。 3xx代码用于重定向,您在此处没有这样做。
如果您返回成功和数据有效负载:200 如果您返回成功而没有内容,则:204
答案 1 :(得分:1)
您还必须考虑PUT HTTP方法。根据{{3}}:
当您可以通过特定资源完全更新资源时,请使用 PUT 。例如,如果您知道文章位于restcookbook.com,则可以通过此URL上的PUT直接输入本文的新资源表示。
如果您不知道实际的资源位置,例如,当您添加新文章但又不知道在哪里存储它时,您可以 POST 它到URL,并且让服务器决定实际的URL。
关于PATCH:
HTTP方法 PATCH 可用于更新部分资源。
对于回复状态代码,我更希望http://example.org/article/1234或200 OK
除了restcookbook之外,我还推荐201 Created这是权威参考。