在非POST调用中传递数据

时间:2014-11-28 05:05:26

标签: python rest python-requests

对于REST api,我知道在POST调用中传递数据是可以接受的:

if method == 'POST':
    r = requests.post(url, headers=headers, data=body)

PUTDELETE来电中传递数据是否可以接受?或者你不应该发送任何数据参数,只请求指定的网址?

1 个答案:

答案 0 :(得分:1)

RFC 7231解释了您需要知道的一切。

REST API中的

PUTvery similarPOST

发表

  

POST方法请求目标资源根据资源自身的特定语义处理请求中包含的表示。 RFC 7231 #4.3.3

<强> PUT

  

PUT方法请求创建目标资源的状态,或者用请求消息有效负载中包含的表示定义的状态替换目标资源的状态。 RFC 7231 #4.3.4

两个请求数据。此外,RFC明确强调了差异,因为它确实很轻微:

  

POST和PUT方法之间的根本区别在于封闭表示的不同意图。 POST请求中的目标资源旨在根据资源自身的语义处理所包含的表示,而PUT请求中的封闭表示被定义为替换目标资源的状态。因此,PUT的意图对于中介来说是幂等的和可见的,即使原始服务器只知道确切的效果。

关于DELETE,RFC说明如下:

  

DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。

我认为这意味着你不应该发送数据。无论如何,RFC确实提到了

  

相对较少的资源允许使用DELETE方法

在我看来,这是现货。你应该完全避免DELETE