django - 混合 Websocket 和 REST

标签 django websocket django-rest-framework django-channels

我正在编写一个 RESTfull api,例如用户可以在一个线程中创建新线程或新帖子。这是我将使用普通 POST 请求的地方。我的 API 还允许用户相互发送消息。当用户收到我想要在浏览器中收到通知的消息时,我会在这里使用 websockets 而不是每隔几秒轮询一次。

我的问题是

  • 由于我已经与 websocket 建立了开放连接,消息将在其中发送,我是否还应该使用此连接来发送消息、创建新线程或帖子?
  • 我可以使用 POST 请求来创建消息和 websockets 来实时接收它们并使用 GET 请求来获取消息历史记录吗?这是好的做法吗?
  • 我正在使用 django rest 框架,它为我处理字段验证,如果我使用 websocket 而不是普通的 POST 请求创建资源,我将如何处理验证。

  • 我在开发 RESTfull API 方面非常陌生,而且我才开始使用 websockets 进行开发。对于任何对您来说似乎合乎逻辑的愚蠢问题,我深表歉意:)

    谢谢

    最佳答案

    Since I already have open connection with websocket where messages will come, should I also use this connection to send messages, create new threads or posts?



    这取决于。如果您使用的是 CQRS 方法并且您的写入由与读取不同的盒子处理,则您希望使用常规的 HTTP POST;或者如果您必须为可能不支持 WebSockets 的外部调用者提供兼容性。

    Can I use POST request for creating messages and websockets to receive them in realtime and GET request to get history of messages? Is this good practice?



    听起来很合理。您将获得 REST 兼容性和 WebSocket 作为增强功能。我所做的是使用 WebSockets 来增强 REST API。一些操作包含在两个部分,例如“自动完成”本质上是快速连续的调用并且属于读取模型可以通过两种方式完成,但是缺点是我无法利用内置输出缓存,我必须为他们实现我自己的缓存。

    I'm using django rest framework, which handles validation of fields for me, how would I handle validation if I create resource using websocket instead of normal POST request.



    我不做 django,但我想您可以以某种方式自己 Hook 该验证,并在反序列化后在您的消息对象中调用它。

    关于django - 混合 Websocket 和 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42017878/

    相关文章:

    python - Django-Rest-Framework POST 对象字段必需

    python - Django:DoesNotExist:SocialApp 匹配查询不存在

    django - 使用 cleaned_data 时如何修复 “TypeError: string indices must be integers”?

    ruby-on-rails - Rails WebSocket 客户端永远不会触发 OnOpen

    Python WSS : chrome not recognizing auto validated certificate

    python - Django 模型的 DateTimeField 正在采用 UTC,即使时区在亚洲/加尔各答无处不在

    php - nginx 代理转发和 stream_socket_get_name

    python - Django Rest Framework 在创建后不返回所有字段

    python - Django Rest Framework Serializer 在 is_valid() 调用后弹出 valid_data,导致 create 中出现 KeyError

    python - django-filter - 将查询参数映射到字段名称