我有一个UI (angular),作为Spring boot App托管,UI与REST API (Jersey)对话。当整个应用程序或部分应用程序在维护时:
1)我不确定,如何向现在访问的任何人显示维护网页(应该是angular,还是spring boot,单独用于jersey后端,以及如何显示?)
2)对于已经在网站某部分的用户,如何通知他们需要刷新?
3)对于已经在网站某一部分的用户,如果他们没有刷新,当维护结束后,如果他们发送了一个POST请求,其中包含一些旧的无效数据,我如何检查?
注意:该网站没有任何用户身份验证。
作为第三点的示例: UI显示数据库中的记录列表,用户当前正在对其中一条记录进行更改,同时后端转到维护。现在,当后端再次可用时,该用户提交更改后的数据。但是这个数据现在是无效的。我如何识别它,并可能将它告知用户。
发布于 2017-04-26 21:29:28
通过维护,我猜你的意思是你的API使用的一些数据库要么更新了,要么备份了,或者类似的东西。在这种情况下,如果API不能处理命令,我会让它返回一个503 Service Unavailable响应码,并让前端向用户显示一些格式良好的信息。
为了确定客户端是否发送旧数据,您可以使用ETag或Last-Modified标头。ETags基本上是当前资源状态的哈希。如果状态发生变化,ETag散列也会发生变化。尝试更新资源的状态的客户端将先前获取的ETag散列连同该资源的新状态一起发送给该API,并且该API然后可以检查是否存在由某个其他客户端应用于该资源的中间改变,并且因此向该客户端返回其不对最新版本起作用的错误。条件请求是在RFC 7232中定义的。
关于你的第二个问题,我不完全确定你想要实现什么。在使用AJAX时,我想说的是迷失的语速。他们到底需要刷新什么?维护过程中是否有资源数据发生变化?如果不是,他们为什么还要关心更新呢?如果需要重置表单输入数据,应用程序接口可能会响应一个205 Reset Content响应代码,但这表明应用程序接口已经完成了请求,并通知客户端重置输入数据。如果应用程序接口由于维护而不能处理请求,我也会返回503 Service Unavailable错误,并让前端通过AJAX向相应的客户端发出信息,如果这是您想要的。
发布于 2017-04-26 21:45:29
1)因为API不能知道任何关于前端的信息,所以我们不应该把逻辑放在那里。此外,如果不通过API进行通信,Angular无法了解任何有关后端的信息。如果使用API或Spring Boot进行维护,会发生什么情况?当这些服务不可用时,Angular不会知道,除非你让它处理收到的响应。
2)在Angular中,您可以对REST API执行超时ping操作。然后在索引中使用一个函数来检查来自API的响应的状态。如果是维护,请重定向至维护页面。这会给你实时连接的感觉,听起来像你想要的,尽管它会增加网络开销,并对你的API造成更大的打击。否则,如果您可以等待用户执行与您的API相关的操作,则可以处理服务关闭时返回的任何http错误代码。
3)你怎么知道它是旧的?这是一个安全问题吗?如果无法从正常传输的数据中区分出来,您可以添加某种时间戳,但这是相当容易规避的。有很多关于时间戳的主题,如果你想这样做的话。
https://stackoverflow.com/questions/43634727
复制相似问题