基于推送的api设计

时间:2017-02-15 00:43:43

标签: http websocket server-sent-events

我正在设计一个Web API,它可以让客户(其他应用程序)有机会推送一些工作请求,立即收到该工作请求的一些ID,然后再收到该工作请求的结果。 这种互动的典型方法是什么? 提供工作请求的结果提醒我服务器推送交互我想到了SSE(服务器发送事件)和webscoket技术,对于websockets(因为客户端可以对所有类型的requets使用相同的连接并接收各种响应)。这是我的目标的好选择吗?以及如何缩放?

1 个答案:

答案 0 :(得分:1)

  

问题在于websocket技术是否适合所描述的api设计方法,如果不是,我想知道什么是更好的方法。这是我的目标的好选择吗?

webSocket连接非常适合在将来的某个不确定时间接收结果,并且建议这样做。

从客户端到服务器的其他请求可以是ajax调用,也可以作为webSocket消息发送,主要取决于是否有其他原因将请求作为ajax调用。如果您已经建立了webSocket连接,那么它是一种方便,简单,快捷的与服务器通信的方式。

了解你所做的各个部分:

  

推送一些工作请求(从客户端到服务器)。

这可以通过Ajax或webSocket同样完成。如果没有其他理由建立已经建立的webSocket连接,那么传统上这将是一个Ajax调用。

  

立即收到该工作请求的一些ID

这实际上对Ajax请求来说实际上要容易一些,因为Ajax是一个请求/响应协议,所以如果你通过Ajax发送工作请求,那么将ID作为对Ajax请求的响应得到回报将是微不足道的。你也可以通过webSocket来做,但webSocket只是一个消息传递协议。将工作请求发送到服务器时,您可以通过webSocket发送它(如前所述)。并且,服务器然后可以立即发回工作ID,但是客户端必须开发某种方式来将返回的工作ID与先前发送的请求相关联,因为这两个消息将不具有彼此的任何自然连接。可以进行关联的一种方法是让客户端在发送初始请求时生成临时ID或哈希值(它实际上可以是该客户端唯一的任何内容,例如时间戳),然后服务器将发送相同的临时请求发送工作ID时返回ID。所有这些对于HTTP / Ajax等请求/响应协议来说都是微不足道的。

  

稍后会收到该工作请求的结果

可以使用HTTP轮询,webSocket或SSE。轮询显然不是特别有效。我知道webSocket可以完美地工作,它将为服务器想要以推送方式发送给客户端的任何其他项目提供开放的管道。 SSE也可用于解决此问题(将数据推送到客户端),尽管我个人对此没有任何经验。