REST API,跟踪多个资源的变化,前端同步

REST API, tracking changes in multiple resources, front-end synchronization

本文关键字:变化 前端 资源 同步 API 跟踪 REST      更新时间:2023-09-26

我有一个具有相当复杂业务逻辑的系统,到目前为止,我有大约10-15个数据库表(资源),而且这个数字还在增长。用户的前端是angularjs单页应用程序。问题是与后端的通信以及保持角度前端与后端数据同步。

后端保留所有资源和它们之间的关系,这是显而易见的。前端获取这些资源并在本地保存它们的副本,以使接口对用户的响应性更强,并避免在每次请求时获取数据。这太棒了。

服务器端有许多操作,这些操作会同时影响许多资源。这意味着添加/删除/编辑一个资源(通过RESTapi)可以修改许多其他资源。

我希望前端应用程序数据始终与后端数据完全同步。这使我能够保持数据的完整性,并使我的应用程序没有错误。任何类型的去同步都是一个很大的"不",它会在我的前端应用程序中引入数百个可能发生未定义行为的地方。

问题是:实现这一目标的最佳方式是什么?我的想法/见解:

  1. 业务逻辑(修改/编辑/删除资源、管理关系、保持数据完整性)只能实现一次。将业务逻辑实现加倍(一个在前端,一个在后端)会引入许多潜在的错误,并涉及代码重复,这显然是一件坏事。如果业务逻辑是在前端实现的,那么后端仍然必须验证数据并保持其完整性——业务逻辑的重复。所以,业务逻辑必须在后端,周期。

  2. 我使用REST API。当我的前端更新一个资源(或通过PATCH方法更新多个资源)时,服务器端会发生很多副作用,其他资源也会被修改。我想让我的前端angular应用程序知道哪些资源被修改并更新(以保持完全同步)。REST只返回最初请求更新的资源,而不返回其他受影响的资源。

我知道我可以使用某种形式的链接资源,并将我的原始更新资源与其他受影响资源的链接一起发送。但如果有100个呢?向服务器发出100个请求会导致性能全面下降。

  1. 我不太喜欢REST,因为我的API不是公共的,它可以是任何东西。我认为最好的解决方案是后端发回所有修改后的资源。这将允许我的前端始终与后端同步,速度快,并且是原子的(在对服务器的多个请求之间没有无效的中间状态)。我认为这个架构会很棒。问题是:这是一种常见的方法吗?是否有任何协议/标准/lib允许我这样做?我们可以从头开始写,但我们不想重新发明轮子。

  2. 事实上,我认为在前端和后端都有业务逻辑会很好,但前提是它只能实现一次。这意味着Javascript后端应用程序。不幸的是,目前,这对我来说是不可能的解决方案

欢迎有任何见解!

添加了backbone.js标签,因为这个问题更多的是关于体系结构,而不是任何特定的技术。

你走在了正确的轨道上,这是你现在面临的一个常见问题。正如您所说,在REST世界中,您的API返回请求/更改的资源。你的问题的一个简单例子:

您(作为用户X)想要跟随另一个用户Y。前端显示您自己的跟随计数器(X)和另一用户(Y)的跟随计数器。http调用类似于:

PUT /users/X/subscribe/Y

API将返回用户Y资源,但X丢失,或者反过来。

为了处理这种情况,我使用我的标准API响应结构的扩展结构,我的标准结构是:

  • 元对象-包括http状态代码和使用该代码的原因、哪个应用服务器处理了响应等
  • 通知对象-包括处理过程中的错误信息(如果有)、针对开发人员的特殊消息等
  • resource-被请求/修改的资源,该属性的名称是资源类型,对于单个资源(例如用户)为单数,对于资源集合(如用户)为复数

    {meta:{状态:200,消息:"OK",appServer:app3},通知:{错误:[]},用户:{id:3123212,订阅者:123,订阅:3234}}

为了返回其他受影响的资源,并保持REST方式+我的静态、标准响应结构,我在响应中附加了一个名为"affectedResources"的对象,它是所有其他受影响资源的数组。在这个非常简单的例子中,数组将只包括用户X资源对象。前端迭代数组,并在前端处理所有必要的更改。