我的数据库中有一个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
个请求。
答案 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下。
答案 1 :(得分:0)
您应该从资源角度看事物。虽然您只是使用时间戳更新值,但实际上是在服务器上创建新资源而不是修改旧资源。返回最新的时间戳资源实际上是业务逻辑的一部分,不应与PUT / POST请求混淆。
所以,正确的答案是使用POST请求。