正在跟踪更新时间时PUT与POST

时间:2015-01-26 18:38:25

标签: http post put

我的数据库中有一个6NF-esque模式,每次更改属性值时,都会使用CURRENT_TIMESTAMP创建一个新行。例如

+----------+-------+---------+
| EntityID | Value | TimeSet |
+----------+-------+---------+
|        1 |   foo | 1:30 PM |
+----------+-------+---------+
|        1 |   bar | 1:31 PM |
+----------+-------+---------+

所以,PK是EntityID, TimeSet(TimeSet是MySQL TIMESTAMP - 我只是使用了示例的可读值。任何GET次请求SELECT仅为实体的最新值(即GET /entities/1/<property>仅返回bar

截至目前,没有任何行为取决于设定的时间,它只是用于审计。我的问题是:当我想通过HTTP设置此属性的值时,我应该使用PUT还是POST?从技术上讲,每次用户发送一个值时都会创建一个新行,但从API的角度来看,该请求是幂等的,因为您可以创建100行相同的值,并且只返回最近的一行任何GET个请求。

2 个答案:

答案 0 :(得分:1)

Meaby这可以帮到你: POST方法用于请求源服务器接受请求中包含的实体作为Request-URI中Request-URI标识的资源的新下级。 POST旨在允许统一的方法来涵盖以下功能:

  - Annotation of existing resources;
  - Posting a message to a bulletin board, newsgroup, mailing list,
    or similar group of articles;
  - Providing a block of data, such as the result of submitting a
    form, to a data-handling process;
  - Extending a database through an append operation.

PUT方法请求将所包含的实体存储在提供的Request-URI下。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

答案 1 :(得分:0)

您应该从资源角度看事物。虽然您只是使用时间戳更新值,但实际上是在服务器上创建新资源而不是修改旧资源。返回最新的时间戳资源实际上是业务逻辑的一部分,不应与PUT / POST请求混淆。

所以,正确的答案是使用POST请求。