RESTAPI:何时使用Post、PUT、PATCH和Delete

RESTAPI:何时使用Post、PUT、PATCH和Delete,rest,http-post,http-delete,http-method,http-put,Rest,Http Post,Http Delete,Http Method,Http Put,我正在开发一个restful api,我需要更新一个资源,即一个包含10个字段的客户详细信息记录 在添加请求时,我发送一个包含完整记录的Post请求。 在更新请求时,我发送一个包含10个字段的完整记录的PUT请求。 在验证请求时,我只发送一个包含两个字段的PUT请求,即recordId和versionNo。 在Delete请求中,我发送了一个带有两个HttpOptions字段的Delete请求 我有几个问题: 尽管它是一个restful api,但它是一个特定的应用程序,角度应用程序将使用它,所

我正在开发一个restful api,我需要更新一个资源,即一个包含10个字段的客户详细信息记录

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

我有几个问题:

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

我是否应该在验证或任何其他操作中使用补丁,其中只有recordId和versionNo发送到服务器以更改某些字段,或者可以使用PUT

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

休息反应 RESTful API必须始终使用HTTP代码响应客户端请求:

成功和错误响应是定义如何正确使用API的关键部分

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

修补/放置 发件人:

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

此外:

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

所以我将使用补丁来验证资源

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

curl -X DELETE http://example.com/resource/{id}
但是你也可以根据请求传递一个实体。MDN Mozilla Web文档说明了这种可能性:

请求已被提交-五月

成功的反应有身体的可能

休息反应 RESTful API必须始终使用HTTP代码响应客户端请求:

成功和错误响应是定义如何正确使用API的关键部分

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

修补/放置 发件人:

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

此外:

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

所以我将使用补丁来验证资源

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

curl -X DELETE http://example.com/resource/{id}
但是你也可以根据请求传递一个实体。MDN Mozilla Web文档说明了这种可能性:

请求已被提交-五月

成功的反应有身体的可能

我应该在验证或任何其他操作中使用补丁吗 recordId和versionNo发送到服务器以更改某些字段,或者 可以使用PUT

在RESTful API设计中,PUT请求通常用于添加或替换整个资源,而补丁只用于更新现有资源。PUT请求称为幂等-无论发送多少次PUT响应,都应该得到相同的结果。面片不是幂等的

例如:

PATCH/Cars/vauxhall astra/engine->此请求将仅用于更新my e的引擎 现有沃克斯霍尔阿斯特拉酒店

PUT/Cars/renault clio->此请求将创建一个新的renault clio,或者,如果它已经存在,则使用我请求中指定的数据替换整个clio。在我的请求成功后,Clio将被保证存在,不管它以前是否存在

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

完全由您决定,从POST/PUT返回数据是可以的——特别是如果它可以避免您必须发出额外的GET api请求的话。只要始终确保您只从响应返回所需的数据

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

再说一遍,这完全取决于你。无论您是使用查询参数,例如删除cars?id=123还是请求正文,这都是您的首选项,REST中没有任何规则

我应该在验证或任何其他操作中使用补丁吗 recordId和versionNo发送到服务器以更改某些字段,或者 可以使用PUT

在RESTful API设计中,PUT请求通常用于添加或替换整个资源,而补丁只用于更新现有资源。PUT请求称为幂等-无论发送多少次PUT响应,都应该得到相同的结果。面片不是幂等的

例如:

PATCH/Cars/vauxhall-astra/engine->此请求将仅用于更新我已经存在的vauxhall-astra的引擎

PUT/Cars/renault clio->此请求将创建一个新的renault clio,或者,如果它已经存在,则使用我请求中指定的数据替换整个clio。在我的请求成功后,Clio将被保证存在,不管它以前是否存在

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

完全由您决定,从POST/PUT返回数据是可以的——特别是如果它可以避免您必须发出额外的GET api请求的话。只要始终确保您只从响应返回所需的数据

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


再说一遍,这完全取决于你。无论您是使用查询参数,例如删除cars?id=123还是请求正文,这都是您的偏好,REST中没有任何内容对此有规则。

尽管其他人在我之前已经详细回答了这个问题,但我还是发布了这篇文章,只是为了在所有这些HTTP方法之间提供一个方便的简短区别

1.HTTP Post:用于创建项目

2.HTTP Put:用于更新项目

3.HTTP补丁:用于部分更新项目


4.HTTP Delete:它用于删除一个项目

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

1.HTTP Post:用于创建项目

2.HTTP Put:用于更新项目

3.HTTP补丁:用于部分更新项目


4.HTTP Delete:用于删除项目

补丁不幂等。这是否意味着,当发出补丁请求时,api会在资源存在时更新它。如果资源不存在,它将不会更新资源。是的,这是正确的。记住,幂等性意味着相同的请求应该总是产生相同的结果。修补程序不能是幂等的,因为假设您发送的修补程序请求更改了资源的位置。如果您再次通过发送完全相同的修补程序请求,它将失败,因为位置已更改。在我的情况下,只有当记录存在且验证操作可用时,才会发出修补程序请求。所以在这种情况下,使用PATCH而不是PUT是安全的,而我只需要更新特定记录的状态码。是的,在这种情况下应该使用PATCH。PATCH不是幂等的。这是否意味着,当发出补丁请求时,api会在资源存在时更新它。如果资源不存在,它将不会更新资源。是的,这是正确的。记住,幂等性意味着相同的请求应该总是产生相同的结果。修补程序不能是幂等的,因为假设您发送的修补程序请求更改了资源的位置。如果您再次通过发送完全相同的修补程序请求,它将失败,因为位置已更改。在我的情况下,只有当记录存在且验证操作可用时,才会发出修补程序请求。所以在这种情况下,使用补丁而不是PUT是安全的,而我只需要更新特定记录的状态码。是的,在这种情况下你应该使用补丁。我的问题不是关于这些定义。我的问题是v
我的问题不是关于这些定义。我的问题非常具体地提到了问题中提到的几点。