使用Web调用API

2024-03-28 20:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的应用程序,它由一个用AngularJS编写的前端和一个用Django Rest Framework编写的API组成。我的应用程序每隔x秒轮询一个API端点,以查看是否有新的更改。在

这些代码每5秒运行一次

var resource = TokenRestangular.one("jobs", job_id);
resource.then(function (objects) {
    //if we have job completed = true then do something else.                    
},

我知道这是一种非常old school的方式。所以我的问题是,我能用websockets来查找AngularJS中的API资源吗?在

我不想重写一个新的API,这样API就可以同时支持REST连接和HTTP上的websockets吗?在


Tags: django代码restapi应用程序websocketsvarjob
1条回答
网友
1楼 · 发布于 2024-03-28 20:50:01

1。客户端

用角度代码编写一个服务,它将创建到websocket服务器的连接。使用promise,您将在每次收到websocket包时更新应用程序的$scope。像这样:

    myApp.service( 'WSService', function() {
        this.promise = function ($q) {
            // Create a deferred object
            var deferred = $q.defer();
            // Create the WebSocket client pointing to the correct API
            var ws = new WebSocket("ws://myIP:myPort/myAPI");
            // Map the messages to action
            ws.onopen = function()  { console.log( "WSService opened"); };
            ws.onmessage = function (evt) { 
                console.log("onmessage:" + evt);
                deferred.notify(evt);
            };
            ws.onclose = function() { console.log("WSService closed"); };
            // Return the promise
            return deferred.promise;
        }
    });

然后在控制器中:

^{pr2}$

2。服务器端

在API前面,编写一个websocket服务器,它将以适当的格式推送JSON数据。例如,您可以挂接模型信号(save,update)一个将模型的JSON序列化推送到客户机的函数。这样,对后端数据库的所有更新都将立即反映到客户端。在

为此,您可以使用一个像django-socketio这样的预先制作的包,它似乎非常流行。在

如果您的websocket服务器发送的数据与模型和范围中的数据匹配,我想它可以符合REST标签。在

相关问题 更多 >