【问题标题】:What is meant by PUT method idempotent in RESTful web service?RESTful Web服务中PUT方法幂等是什么意思?
【发布时间】:2013-08-28 10:39:10
【问题描述】:

我正在尝试确定应该使用 PUT 还是 POST 的 Http 方法。

在查看 StackOverlflow 上的一些帖子时,我可以看到 this 帖子。

帖子中的一个答案说

PUT 是幂等的,所以如果你 PUT 一个对象两次,它就没有效果。这是一个不错的属性,所以我会尽可能使用 PUT。

谁能帮我举个例子。假设我有一个场景,我正在尝试创建一个学生,其条目将在 RDBMS 的学生表中传递。

所以在这里,如果我一次又一次地尝试 PUT 那个条目会没有效果吗?

【问题讨论】:

    标签: rest post put


    【解决方案1】:

    在 PUT 中,您正在设置所有资源的值,因此当 PUT 完成时,您可以确切地知道资源的状态。如果您等待一周并再次调用您的 PUT,您仍然可以确切地知道资源的状态。

    相比之下,POST 不是 幂等的 - 您只能 POST 值的子集。因此,如果您今天调用 POST,等待一周,然后再次进行相同的 POST 调用,您不知道资源的状态是什么 - 有人可能更改了您未在 POST 中设置的值。

    幂等意味着无论何时或多久进行一次调用,资源的最终状态都是完全相同的。

    DELETE 和 GET 也是幂等的。

    【讨论】:

    • 我不明白的一件事是 idem-potency 是由 Http 服务器实现的吗?我可以尝试使用 PUT 和 POST 创建一个 Strudent。因此,在创建 Student 时,我的服务方法可以创建 Student 的次数与 PUT 或 POST 请求命中一样多。
    • @Sam,您将确保服务器上的代码强制执行 PUT 的幂等性属性。我不明白你的最后一句话。这里有更多关于幂等性的内容:stackoverflow.com/questions/7016785/…
    • 你的意思是我必须确保我的同一性效力得到保证。那么这种方式 PUT 或 POST 将只是术语。我将尝试通过 PUT 3 次创建学生,与使用 POST 相同。那么使用 PUT 不会创建学生 3 次吗?这就是我最后一句话的意思。
    • POST 通常用于在最终用户不知道资源的唯一 ID 的情况下创建资源。因此,三个 POST 将创建三个新资源,每个资源都有一个服务器分配的 ID。如果您使用 PUT 创建资源,则必须指定所有值,包括唯一 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多