6

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

我的问题是

  • 由于我已经与将要发送消息的 websocket 建立了开放连接,我是否也应该使用此连接来发送消息、创建新线程或帖子?

  • 我可以使用 POST 请求来创建消息和 websockets 来实时接收它们,并使用 GET 请求来获取消息历史记录吗?这是好习惯吗?

  • 我正在使用 django rest 框架,它为我处理字段验证,如果我使用 websocket 而不是普通的 POST 请求创建资源,我将如何处理验证。

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

谢谢

4

2 回答 2

0

关于你的第三个问题,最基本的解决方案看起来像

def ws_create_item(message):
    data = json.loads(message['text'])
    serializer = ItemSerializer(data=data)
    if serializer.is_valid():
        serializer.save()

哪里ItemSerializer只是您常用的 DRF 序列化程序,并且ws_create_item是接收 WebSocket 消费者。

于 2017-02-07T01:47:10.810 回答
0

由于我已经与将要发送消息的 websocket 建立了开放连接,我是否也应该使用此连接来发送消息、创建新线程或帖子?

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

我可以使用 POST 请求来创建消息和 websockets 来实时接收它们,并使用 GET 请求来获取消息历史记录吗?这是好习惯吗?

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

我正在使用 django rest 框架,它为我处理字段验证,如果我使用 websocket 而不是普通的 POST 请求创建资源,我将如何处理验证。

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

于 2017-02-06T16:41:04.773 回答