我有一个UI(角度),作为Spring启动应用程序托管, UI与REST API(Jersey)对话。 当整个应用程序或其中的一部分进行维护时:
1)我不确定,如何向现在访问的任何人显示维护网页(应该是有角度的,还是春季启动,还是分别针对球衣后端,以及如何?)。
2)对于已经在网站某些部分的用户,我如何通知他们需要刷新。
3)对于已经在网站某些部分的用户,如果他们不刷新,以后在维护结束时,如果他们发送带有一些旧的无效数据的POST请求,我该如何检查?
注意:该网站没有任何用户身份验证。
作为第3点的例子: UI显示数据库中的记录列表,用户当前正在对其中一个记录进行更改,同时后端进入维护。现在,当后端再次可用时,此用户提交已更改的数据。但是这个数据现在无效。我该如何识别,并可能告知用户。
答案 0 :(得分:0)
通过维护,我猜你的意思是你的API使用的某些数据库要么更新了,要么备份或类似。在这种情况下,如果API无法处理命令,我会让它返回503 Service Unavailable
响应代码,并让前端向用户显示一些格式良好的信息。
为了确定客户是否发送旧数据,您可以使用ETag
或Last-Modified
标头。 ETag基本上是当前资源状态的哈希值。如果状态改变,那么ETag哈希也是如此。尝试更新资源状态的客户端将先前获取的ETag哈希值与资源的新状态一起发送到API,然后API可以检查是否存在由其他客户端应用于资源的中间更改并因此返回客户端的错误,它不会对最新版本起作用。条件请求在RFC 7232中定义。
关于你的第二个问题,我不完全确定你想要完成什么。我在使用AJAX时会说不出话来。他们究竟要刷新什么?维护期间是否有一些资源数据发生变化?如果没有,他们为什么要关心刷新?如果应重置表单输入数据,则API可以使用205 Reset Content
响应代码进行响应,但这表示API已满足请求并通知客户端重置输入数据。如果API由于维护而无法处理请求,我还会返回503 Service Unavailable
错误,并让前端通过AJAX向相应的客户端发出信息,如果这就是您正在寻找的。 p >
答案 1 :(得分:0)
1)由于API无法了解前端,我们不应该把逻辑放在那里。此外,如果没有通过API进行通信,Angular无法了解后端的任何信息。如果您将API或Spring Boot用于维护,会发生什么? Angular不知道,除非你让它处理那些服务不可用时收到的响应。
2)从Angular,您可以对REST API的超时进行某种ping操作。然后在索引中有一个函数,用于检查API响应的状态。如果维护,重定向到维护页面。这会让你觉得它听起来像你想要的实时连接,虽然它会增加网络开销并且更难以点击你的API。否则,如果您可以等到用户执行触及API的操作,则可以处理服务中断时返回的任何http错误代码。
3)你怎么知道它已经老了?这是安全问题吗?如果没有办法从正常传输的数据中分辨出来,你可以添加某种时间戳,但这很容易规避。如果这是您想要的方式,那么时间戳上有很多主题。