我有这样的终点
/profiles/1
我想获取ID为1的配置文件,但同时将访问的属性增加1。该属性作为对象的一部分出现。我应该使用哪个HTTP动词来获取访问属性增加1的配置文件对象。
每次获取ID为1的配置文件时,访问的属性都会增加1。
我应该使用哪个HTTP动词来获取访问属性增加1的配置文件对象?
该GET
方法旨在用于数据检索,因此是一种候选方法。引用RFC 7231,该文档当前定义了HTTP / 1.1协议的语义和内容:
4.3.1。得到
该
GET
方法请求传输目标资源的当前所选表示。GET
是信息检索的主要机制,也是几乎所有性能优化的重点。[...]
该GET
方法还被定义为安全(只读)和幂等(使用该方法的多个相同请求与单个此类请求的效果相同)。
但是它仍然在桌子上。再次引用RFC 7231(重点是我的):
4.2.1。安全方法
如果请求方法的定义语义本质上是只读的,则将其视为“安全”。也就是说,由于将安全方法应用于目标资源,客户端不会请求也不会期望原始服务器上的任何状态更改。[...]
安全方法的这种定义不会阻止实现包含可能有害的行为,该行为不是完全只读的,或者在调用安全方法时会引起副作用。 但是,重要的是客户没有要求其他行为,因此不能追究其责任。例如,大多数服务器在每次响应完成时都将请求信息附加到访问日志文件中,而不管采用哪种方法,即使日志存储空间可能已满并使服务器崩溃,这也被认为是安全的。[...]
4.2.2。幂等方法
如果使用该方法的多个相同请求在服务器上的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等”。[...]
就像保险柜的定义一样,幂等属性仅适用于用户所要求的内容;服务器可以自由地单独记录每个请求,保留版本控制历史记录或为每个幂等请求实现其他非幂等副作用。
假设您要计算检索配置文件的次数,则可以将其附加到GET
操作上。但是,您可能希望避免例如在机器人击中端点时增加计数器。
因此,在某些情况下,GET
允许请求具有副作用。但是,重要的是,客户端没有请求其他行为,因此不能追究其责任:服务器的职责是服务器的责任。
最终,说HTTP不在乎下面的存储也很重要,因此您可以将视图计数存储在与概要文件数据相同的表中,也可以存储在不同的表或完全不同的数据库中。然后一起检索所有数据,或使用不同的端点作为视图计数。