选择Websocket REST范例

选择Websocket REST范例,rest,websocket,socket.io,signalr,webhooks,Rest,Websocket,Socket.io,Signalr,Webhooks,由于REST是一种体系结构样式,而不是协议,因此它可以应用于大多数任何协议形式,例如WebSocket。这正是我想做的,但我想帮助决定一种方法 在我进行研究时,我发现我可以遵循三种范式: 模拟请求响应。这是在中实现的。每个客户端请求都有一个ID。每个服务器推送响应都有相同的ID,以允许请求响应之间的关联 仅通知。服务器推送一个资源地址,这意味着客户端应该对该资源执行GET以发现发生了什么变化 事件驱动的。服务器推送被设计为类似于HTTP POST,可能类似于webhook请求 我想听听那些走

由于REST是一种体系结构样式,而不是协议,因此它可以应用于大多数任何协议形式,例如WebSocket。这正是我想做的,但我想帮助决定一种方法

在我进行研究时,我发现我可以遵循三种范式:

  • 模拟请求响应。这是在中实现的。每个客户端请求都有一个ID。每个服务器推送响应都有相同的ID,以允许请求响应之间的关联
  • 仅通知。服务器推送一个资源地址,这意味着客户端应该对该资源执行GET以发现发生了什么变化
  • 事件驱动的。服务器推送被设计为类似于HTTP POST,可能类似于webhook请求
我想听听那些走过这些道路的人的意见,他们发现哪条道路最有效,他们使用了哪些工具(如上文提到的招摇过市工具)

我关心的一个主要问题是简化解复用和反序列化。例如,假设我有一个用Typescript编写的客户机。我可能希望将服务器推送负载反序列化到已声明的类型化对象中。我认为每种范式的后果如下:

  • 模拟请求响应(SRR)。SwaggerSocket消息必须反序列化两次。首先查找响应ID和/或“路径”,然后将实际负载检索到“类型化”对象中。有点笨拙,但可行
  • 仅通知。服务器推送消息可以反序列化为单个预定义类型,因为它只包含一个REST资源路径
  • 事件驱动的。如果“事件”没有有效负载,那么这与仅通知方法基本相同。但如果存在有效负载,则可能需要再次执行两步反序列化
我的其他想法是:SRR可能是这三种方法中最具局限性的一种,因为从理论上讲,每个服务器推送都是由客户机请求发起的。其他两种范式没有这种隐式模型。事件驱动方法在概念上的优势是类似于webhook回调

为了说明事件驱动/webhook的思想,我将给出一个示例

//client side.
hubProxy.On<HttpRequest>("EventNotice", request => {
    //Take apart the HttpResponse and dispatch through
    //my own routing mechanism...to handlers that 
    //further deserialize the inner payload.
});

//The corresponding server-push would of course be:
_context.Clients.All.EventNotice(myHttpRequest);
//客户端。
hubProxy.On(“事件通知”,请求=>{
//拆开HttpResponse并通过
//我自己的路由机制…来解决这个问题
//进一步反序列化内部有效负载。
});
//相应的服务器推送当然是:
_context.Clients.All.EventNotice(myHttpRequest);
上面的例子很容易实现。事实上,有人有示例代码(请共享!),甚至有一个用于此目的的支持库,我都不会感到惊讶

再说一次,对于这些不同的范例,你有什么建议?您建议使用哪些支持工具