我要使用什么 Http 方法来修改这个 REST 资源以及我要 return 什么响应代码?

What Http method have I to use to modify this REST resource and what response code have I to return?

我是 RESTful 网络服务的新手,我有以下疑问。我正在开发一个 Spring MVC 应用程序(但这并不重要,因为我的疑问与 REST 概念更相关)。

我有这个域名class:

@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_mediatable。

然后我有一个控制器方法来处理向 URL 发出的 HTTP 请求:/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 进行部分更新。 POSTPATCH Http Method 的使用有什么区别?在这种情况下最好的是什么?

2) 如果更新成功,我对 return 有什么样的状态码响应?这里: Best practice for partial updates in a RESTful service

它说 303 但是 303 应该是 重定向消息 而不是什么东西像200就说明操作没问题?

您还必须考虑 PUT HTTP 方法。根据 restcookbook.com :

Use PUT when you can update a resource completely through a specific resource. For instance, if you know that an article resides at http://example.org/article/1234, you can PUT a new resource representation of this article directly through a PUT on this URL.

If you do not know the actual resource location, for instance, when you add a new article, but do not have any idea where to store it, you can POST it to an URL, and let the server decide the actual URL.

关于补丁:

The HTTP methods PATCH can be used to update partial resources.

对于响应状态码,我更喜欢200 OK, or 201 Created

除了restcookbook,我还推荐RFC 7231,比较权威

作为一般规则,CRUD 操作应遵循以下模式:

POST: Create
PUT: Update
GET: Read
DELETE: Delete

如果操作成功,我会return一个2xx代码。 3xx 代码用于重定向,您不会在此处执行此操作。

如果您 return 成功并且数据负载:200 如果您 return 成功但没有内容,则:204

处理 REST 响应的好资源:http://www.restapitutorial.com/httpstatuscodes.html