为什么Stripe使用Post方法更新资源

问题描述

According to the RFC Put is used to update an existing resource.

但是,Stripe API使用Post来更新对象。为什么会这样?

例如,在Stripe Node Library

  update: stripeMethod({
    method: 'POST',path: '{id}',}),

update method呼叫POST

我知道没有Patch方法,因为必须在每次调用时发送整个资源,为什么在这种情况下不使用Put HTTP动词?

(与an SO question about the Facebook API中的示例不同,该资源可由URL中传递的单个ID标识),例如URL只是/v1/customers/:id

Stripe Customer Update API Docs

解决方法

有趣的问题!来自your link

PUT方法要求将封闭实体存储在 提供的Request-URI。如果Request-URI引用了 现有资源,则所包含的实体应视为 原始服务器上的版本的修改版本。 [强调我的]

这意味着您必须PUT {em>整个资源(更改和未更改都一样)。这样设计的API很少。

来自spec for POST

POST方法用于请求源服务器接受 请求中包含的实体作为资源的新下属 在请求行中由Request-URI标识。 POST被设计 允许采用统一的方法来覆盖以下功能:

  • 现有资源注释;

许多/大多数API已采用POST作为更新对象的方式。

此处还有一些其他想法:https://stackoverflow.com/a/25909372/379538

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...