在我最近构建的单页webapp中,我使用Restangular模块为我的模型获取数据。我想为应用添加实时更新,因此无论何时在服务器上更改或添加任何模型,我都可以更新我的模型列表。
我在Trello等网络应用程序中看到这种方法非常有效,您可以在不刷新网页的情况下查看更新。我确信Trello webclient使用REST API。
建立服务器和客户端以存档它的正确方法是什么?
答案 0 :(得分:11)
首先,您的问题太笼统,可能有很多依赖的解决方案 根据您的需求和条件。
当您想要离开REST API时,我将简要介绍单个案例 并使用网络套接字添加一些实时。
从REST获取所有数据 - Sokets仅用于通知。
优点:易于实现服务器端和客户端。您只需要在服务器上发出事件 有关已修改资源(如资源名称和ID)的信息,并在客户端捕获这些事件并获取 使用REST API的数据。
缺点:每次通知都会向服务器再发一次请求。当您为单个资源拥有大量活动客户端时,这会大大增加流量(它们会向服务器生成大量反向请求)。
从REST获取初始加载 - 套接字以获取包含数据有效负载的通知。
优点:所有信息都附带通知,不会对服务器产生新请求,因此我们的流量较少。
缺点:更难实现服务器端和客户端。您需要将数据添加到服务器上的所有事件。您需要从客户端的所有事件中获取数据。
根据评论更新
至于处理不同类型的模型(只是一种方法)。
客户端。
factory
。Created, Updated, Deleted
)。initObject
函数,它将通过ID和extend
在缓存中找到实体,如果没有具有这种ID的实体,只需创建一个新的并添加它要缓存。Delete
只会从缓存中删除实体。任何时候你需要这个资源,你应该返回缓存对象的链接,以保持双向数据绑定(这就是我使用extend
而不是=
)的原因。当然,您需要处理以下情况:"用户正在编辑资源,而有关删除的通知来自"。
服务器端。
Create, Update, Delete
事件推送活动。NewTask
,UpdateTask
个事件。可以通过两种方式处理集合更改:添加/更新/删除集合中的项目或更改整个集合。
PUT, POST, DELETE
等所有修改当然都是使用REST进行的。
我为案例1)制作了一个超级简单的伪要点。 https://gist.github.com/gpstmp/9868760但可以针对案例2更新https://gist.github.com/gpstmp/9900454
希望这有帮助。