REST API - "GET /user" 更改数据库中的用户
REST API - "GET /user" changes user in database
我们有一个简单的用户 API,包括“GET /user”来请求用户信息。在处理请求时,我们将当前日期时间存储为数据库中的“lastVisit”。结果我们有一个 GET 请求更新我们数据库中的用户,这似乎是不好的做法。
由于我们不自己处理登录过程,因此 GET /user 是对我们后端的第一个请求。我们不能使用 /login 来检索和存储“lastVisit”。
这是不好的做法吗?如何解决问题?
当您收到 GET 请求时更新您的数据库没有任何问题 - HTTP 的统一接口限制了 GET 方法令牌 的含义,但是您有很大的自由度您的服务器如何实现对该请求的处理。
这么多就好了。
但是,“lastVisit”可能是个问题 - 也就是说,您对有人要求获取页面副本的含义的解释忽略了各种边缘情况:网络蜘蛛跟随 link s 来索引文档(想想 Google),或者智能浏览器试图通过在用户点击它之前下载 link 来减少延迟。
根据请求,您不知道提取是由客户端触发的,还是由代表客户端的通用代理触发的。同样,您不知道有任何资源请求被具有有效资源副本的缓存拦截和处理。
可能使用请求处理时间作为上次访问的代理是一个足够好的成本效益近似值,但您应该记住这是估计,不是事实。
我们有一个简单的用户 API,包括“GET /user”来请求用户信息。在处理请求时,我们将当前日期时间存储为数据库中的“lastVisit”。结果我们有一个 GET 请求更新我们数据库中的用户,这似乎是不好的做法。
由于我们不自己处理登录过程,因此 GET /user 是对我们后端的第一个请求。我们不能使用 /login 来检索和存储“lastVisit”。
这是不好的做法吗?如何解决问题?
当您收到 GET 请求时更新您的数据库没有任何问题 - HTTP 的统一接口限制了 GET 方法令牌 的含义,但是您有很大的自由度您的服务器如何实现对该请求的处理。
这么多就好了。
但是,“lastVisit”可能是个问题 - 也就是说,您对有人要求获取页面副本的含义的解释忽略了各种边缘情况:网络蜘蛛跟随 link s 来索引文档(想想 Google),或者智能浏览器试图通过在用户点击它之前下载 link 来减少延迟。
根据请求,您不知道提取是由客户端触发的,还是由代表客户端的通用代理触发的。同样,您不知道有任何资源请求被具有有效资源副本的缓存拦截和处理。
可能使用请求处理时间作为上次访问的代理是一个足够好的成本效益近似值,但您应该记住这是估计,不是事实。