检查来自API端点的数据是否已更改(来自Angular前端)

时间:2019-07-17 09:17:44

标签: angular rest frontend api-design

对于我的Angular应用程序,我必须从API获取数据。现在,我正在将数据加载到服务中,以便为组件提供数据。

export class DataService{
  private dataSource = new Subject();
  currentData = this.dataSource.asObservable();

  constructor(private http: HttpClient) {
    this.http.get('/api/v1/data').subscribe(data => {
      this.updateData(data);
    });
  }

  updateData(data) {
    this.dataSource.next(data);
  }
}

API数据每5分钟更改一次以显示最新数据。
我现在正在尝试检查端点上的数据是否已更改,以便触发新的GET


我的第一个想法是每5分钟制作一次GET,但后来我意识到我将从网站加载开始。这使其无法与API同步。

我不确定WebSockets /服务器端事件是否可以正常工作,因为该API位于外部服务器上,除了读取它之外,其交互性受到限制。


那么,真的有其他方法吗?还是唯一的选择就是用请求对API进行垃圾邮件,看看它是否更改了?


编辑:也许可以使用带有最新更新时间戳的另一个端点。然后,前端可以检查其是否具有最新更新。

即使这并不能真正解决问题,也至少可以减少不必要的数据发送量。

3 个答案:

答案 0 :(得分:1)

您可以使用可观察对象 Sourse

  

Observables Observables提供了在之间传递消息的支持   应用程序中的发布者和订阅者。可观察的报价   与其他用于事件处理的技术相比,具有明显的优势,   异步编程,并处理多个值。

     

可观察性是声明性的-也就是说,您为   发布值,但是直到消费者订阅才执行   对此。然后,订阅的消费者会收到通知,直到   功能完成,或者直到他们退订。

 private subscribeLiveData(): void {

    this.dataSubcribed = Observable.timer(5000)
      .subscribe(() => this.refreshLiveData());
  }
  private refreshLiveData(): void {
    this.postsSubscription = this._livedata.getTask().subscribe(

      (data: YourModle[]) => {
        this.yourmodaldata = data;

      },
      function (error) {
        console.log(error);
      },
      function () {
        console.log("done");
      }
    );
  }

答案 1 :(得分:0)

当值自动更改时,U可以将您的方法放入组件中的DoCheck [Life Cycle Hook]组件中

答案 2 :(得分:0)

似乎轮询是最简单的选择。
现在,我将使用来自API的定时轮询,并通过全局时间进行同步。

  getData() {
      this.http.get("/assets/data.json").subscribe(data => {
        this.updateData(data);
      });

      const timer = 5 * 60;
      setTimeout(() => {
          console.log(new Date());
          this.getData();
      }, timer * 1000);
  }

也许我会尝试一下REST挂钩,但是稍后会发生。