【问题标题】:Is it okay to use patch for full update instead of put?可以使用补丁进行完整更新而不是放置吗?
【发布时间】:2017-03-04 23:58:37
【问题描述】:

我将 Django 和 DRF 用于 API。假设我有一个包含三个字段(名称、密码、电子邮件)的对象。当用户想要同时更新他的姓名、密码和电子邮件时,我可以发送PATCH 请求而不是PUT 请求吗?缺点是什么?

我觉得这比检查用户是否正在更新所有字段更方便,如果是,则使用 PUT 请求,如果不是,则使用 PATCH

检查对象是否存在已在后端处理,并且在创建对象时,我使用CREATE / POST而不是PUT,因为它对我来说更方便。

编辑:我正在使用 AngularJS 的 PATCH:https://docs.angularjs.org/api/ng/service/$http#patch 将内容发送到由 DRF Viewset 处理的后端(处理 PATCH 请求)。

【问题讨论】:

    标签: django http django-rest-framework patch put


    【解决方案1】:

    使用 PATCH 即可。但是请注意,它不会检查必填字段而不是 PUT。

    【讨论】:

      【解决方案2】:

      除非您使用为 PATCH 定义了语义的媒体类型,否则不能使用 PATCH。 “应用程序/json”没有。

      https://www.rfc-editor.org/errata_search.php?eid=3169:

      如果操作没有修改由 以语义定义的可预测方式请求 URI 对于 PATCH 媒体类型,应该考虑 POST 而不是 PATCH 或 PUT。

      FWIW,请参阅 RFC 6902 和 RFC 7386 了解您可以使用的类型。

      【讨论】:

      • 嗯,我不太清楚您所说的“为PATCH 定义语义的媒体类型是什么意思,但我使用AngularJS 的PATCH:docs.angularjs.org/api/ng/service/$http#patch 将内容发送到后端,由 DRF 处理(处理 PATCH 请求)。这样可以吗?
      • 不,如果它使用 application/json。需要有一个规范说明——独立于实现——该请求的语义是什么。
      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2023-03-09
      • 2010-09-27
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多