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