Rest Api:何时使用发布,PUT,补丁和删除

时间:2019-02-25 10:07:48

标签: rest http-post http-delete http-method http-put

我正在使用一个宁静的api,并且需要更新资源(即具有10个字段的客户详细记录)。

在“添加”请求中,我发送了具有完整记录的“发布”请求。 在更新请求中,我发送了一个包含10个字段的完整记录的PUT请求。 在验证请求中,我发送的PUT请求只有两个字段,即recordId和versionNo。 在删除请求时,我发送一个带有HttpOptions中两个字段的DELETE请求。

我有几个问题:

  • 尽管它是一个宁静的api,但将由角度应用程序使用,但它是特定的应用程序,所以我应该返回数据以响应POST / PUT请求。

  • 如果要进行验证(或其他仅将recordId和versionNo发送到服务器以更改某些字段的操作),还是应该使用PUT。

  • 为了保持一致,我应该在删除请求的正文中发送数据,因为我需要recordId和versionNo来删除记录。

3 个答案:

答案 0 :(得分:1)

REST响应

RESTful API 必须始终使用HTTP代码回答客户端请求:

  

成功和错误响应是定义如何正确使用API​​的重要组成部分。

请参阅this指南以解决您所有与RESTful相关的问题。


PATCH / PUT

来自Wikipedia

  

PUT和PATCH方法之间的主要区别在于,PUT方法使用请求URI提供所请求资源的修改版本,以替换资源的原始版本,而PATCH方法提供一组指令来修改资源。资源。如果PATCH文档大于通过PUT方法发送的资源的新版本的大小,则首选PUT方法

也:

  

当只需要对资源进行少量更改时,与PATCH方法相比,使用PUT方法会消耗更多带宽。但是,使用PATCH方法时,通常涉及从服务器获取资源,比较原始文件和新文件,创建并发送差异文件。在服务器端,服务器必须读取diff文件并进行修改。与PUT方法相比,这涉及很多开销。[11]另一方面,PUT方法要求在PUT之前执行GET,并且很难确保在GET和PUT请求之间不修改资源。

所以我将使用 PATCH 来验证资源。


删除

通常,对于 Delete 请求,客户端会指定资源的id并将其作为路径变量传递给URL:

curl -X DELETE http://example.com/resource/{id}

但是您也可以根据请求传递正文。 MDN Mozilla Web DOCS指出了这种可能性:

  

请求包含正文-可能

     

成功的回应有可能-五月

答案 1 :(得分:1)

  

如果要进行验证,我应该使用PATCH(或其他任何操作,   recordId和versionNo发送到服务器以更改某些字段)或   可以使用PUT。

在RESTful API设计中,PUT请求通常用于添加或替换整个资源,而PATCH应该仅用于更新现有资源。一个PUT请求被称为“幂等”-无论您发送多少次PUT响应,您都应该获得相同的结果。修补程序不是幂等的。

示例:

PATCH / Cars / vauxhall-astra / engine->此请求将仅用于更新我现有的vauxhall astra的引擎

PUT / Cars / renault-clio->此请求将创建一个新的Renault Clio,或者如果已经存在,则使用我的请求中指定的数据替换整个Clio。这样一来,无论我之前是否存在Clio,都可以保证它存在。

  

尽管它是一个宁静的api,但将由角度应用程序使用,但它是特定的应用程序,所以我应该返回数据以响应POST / PUT请求。

完全由您决定,从POST / PUT返回数据就可以了-尤其是如果它省去了您必须进行额外的GET api请求的时间,尤其如此。只需确保您只从响应中返回所需的数据即可。

  

为了保持一致,我应该在删除请求的正文中发送数据,因为我需要recordId和versionNo来删除记录。

这完全取决于您。无论您使用查询参数(例如DELETE cars?id = 123)还是请求正文都只是您的偏好,REST中没有任何规则可用于此。

答案 2 :(得分:0)

即使其他人已经在我之前详细回答了这个问题,但我仍然在发布此信息只是为了在所有这些HTTP方法之间提供一个方便的简短区别

1.HTTP Post:用于创建项目

2.HTTP Put:用于更新项目

3.HTTP修补程序:用于部分更新项目

4.HTTP Delete:用于删除项目