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

aue*_*chb 9 api standards http http-verbs stripe-payments

根据RFCPut用于更新现有资源。

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

例如,在Stripe 节点库中

  update: stripeMethod({
    method: 'POST',
    path: '{id}',
  }),
Run Code Online (Sandbox Code Playgroud)

update方法调用POST

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

(与有关 Facebook API 的 SO 问题中的示例不同,资源可以通过 URL 中传递的单个 ID 来识别)例如 URL 很简单/v1/customers/:id

Stripe 客户更新 API 文档

flo*_*mas 7

有趣的问题!从您的链接

PUT 方法请求将所包含的实体存储在提供的 Request-URI 下。如果 Request-URI 引用一个已经存在的资源,则所包含的实体应该被视为驻留在源服务器上的实体的修改版本。[强调我的]

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

POST 规范来看

POST 方法用于请求源服务器接受请求中包含的实体,作为请求行中的请求 URI 标识的资源的新下属。POST 旨在允许统一的方法来涵盖以下功能:

  • 现有资源的注释;

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

这里有一些额外的想法:https ://stackoverflow.com/a/25909372/379538

  • Stripe 可能会考虑使用“PATCH”进行部分更新。但是引入“PATCH”的 [RFC 5789](https://tools.ietf.org/html/rfc5789) 是在 2010 年编写的,同年 Stripe 成立。 (5认同)