2016-01-21 34 views
4

我正在开发一个API,查看有关HTTP方法的文档,它说“GET”不应该修改资源的状态。如果我要计算资源查看次数并将其返回给响应,该怎么办?如何管理API中的GET方法

喜欢的东西

GET /resource/1 
{ 
    "content": "This is the resource 1", 
    "view_count": 1 
} 

在接下来的调用返回的是:

GET /resource/1 
{ 
    "content": "This is the resource 1", 
    "view_count": 2 
} 

待办事项我在一些违反规则?

回答

2

我认为,事实上,view_count被同时使用GET更新不多这里如果违反了你说view_count不是资源本身的一部分。这只是一些额外的数据。你甚至可以修改你的请求来反映这一点。类似GET /resource/1?include=view_count。我认为这被称为资源扩张。

+0

我认为与@Viktor A.相同请参阅RFC https://tools.ietf.org/html/rfc7231#section-:“客户端构造 请求消息以传达特定意图”。你的意图是获取内容,而不是修改它。所以view_count是一个副作用,不是问题。但请小心,后续的GET请求可能会返回一个带有旧的“view_count”的缓存表示。如果这对你是一个问题,那么你应该将这个值分开一个子资源(就像Viktor告诉你的那样),因为这意味着它是资源的一部分,而不是副作用。 – BenC

0

尽管不要用GET请求修改资源的状态是一种好的做法,但我认为您的用例是一个例外。我真的不能想到另一种方式,甚至可以完成。

编辑:

有人说(删除其评论之前),该API用户应先使用PATCH要求每GET要求保持view_count最新的。

我用这种方法看到的问题是view_count会变得不可靠,因为你依靠你的API用户保持它的最新状态。

试想一下,如果网络用户必须提交给谷歌Analytics(分析)每次请求他们访问一个网页...

+0

这不是Google Analytics所做的事情吗?每一页都向谷歌分析服务器提交请求? – Pipe

+0

@Pipe我的意思是作为一个比喻。让我知道我能否更好地解释它。 –

+0

我刚刚了解你的隐喻 – Pipe