Flask:Confused 在 Rest API 中使用 PUT/POST

Flask:Confused over using PUT/POST in Rest API

尊敬的Elders/Programmers/Learned-people,
我在这里阅读了一个关于使用 PUT 或 POST 的非常受欢迎的答案,但我无法从中解读出正确的方法是什么。几乎每个答案都有评论说这是 wrong/this 是正确的。大惑不解。
我的要求:
正在向服务器发送 2 Json 个文件,一个要插入到数据库中,另一个要更新。我想我会使用 PUT 来更新,并使用 POST 插入到数据库中。这样,在客户端本身,我将决定是插入还是更新。

混淆:因为,客户端单独负责其数据在服务器上 created/updated,即使 POST 在我的情况下重复插入相同的东西(insert into table values) 一遍又一遍,表现为幂等 OR 会给出错误(因为主键冲突)。最后,它不会在两次发射后创造出新的东西。

问题:更新用PUT,插入用POST正确吗?

PUT也可以用来创建。重要的是 url。这是通常公认的模式:

PUT /collection/1234 <- Update a specific item OR create it
POST /collection <- Add a new item to a collection

哪一个适合您取决于几个因素。服务器确定新项目的url,还是客户端?

如果客户端可以弄清楚新项目的 url 会变成什么,使用 PUT 可能会更好,因为您可以更轻松地将其转换为幂等请求。

请记住,使用 PUT 请求的目的始终是您 替换 目标 url 处的资源为新状态。

但是,如果服务器创建 url 模式(也许您有一个 auto-incrementing id),POST 更好。 POST 没有 在 parent collection 上,但它很常见。

如果你想要 POST 并且想要幂等性,你需要一些其他的方法来找出重复的请求。您可以通过 PUT 免费获得。比如Stripe API solves 这个通过添加一个 non-standard Idempotency-Key header.