6

可能重复:
REST 中的 PUT 与 POST

我知道这已经讨论了很多,虽然我有点明白,但我并不完全明白。我认为,如果有人可以就以下示例回答这个问题,那将很容易理解。

创建新用户 - 将新用户添加到发送用户名、密码、电子邮件的数据库。放置或发布?

我想也许 PUT 因为我不想有重复的用户,而 PUT 就像删除和替换一样。但是,我有避免用户被添加两次的检查,所以也许我应该使用 POST?

更新用户 - 更改电子邮件或密码。放置或发布?

我可以使用 URI api/update/my_username 然后通过正文发送新电子邮件,所以这应该是 PUT 吗?我也可以在 URI 中发送所有内容,例如 api/update/my_username/email/new_email@email.com

4

2 回答 2

11

创建 - 发布,更新 - 放置,删除 - 删除。

为了更好地理解 HTTP 动词的用法,请查看 RFC https://www.rfc-editor.org/rfc/rfc2616

PUT 请求也可以创建实体,但响应代码应该是 201 创建而不是 200 OK 和 204 No Content。但这取决于您是否允许/实施此类行为。

于 2012-07-19T10:25:11.240 回答
2

关键指导是操作是否是幂等的,即如果你重复它会发生什么。如果总体上发生相同的事情(忽略日志、上次更改时间和其他琐事),无论您执行一次、两次还是 20 次请求,它都是幂等的,应该是 PUT。如果您这样做的次数很重要,请使用 POST。

创建通常是非幂等的,因为您通常会向用户发出一个 ID,但它不必那样(例如,如果调用者指定了 ID)。更新通常是幂等的,因为将数据字段更改为其当前值在实践中通常是一种有效的无操作。

于 2012-07-19T10:38:37.990 回答