我正在编写RESTfull api,例如用户可以在线程中创建新线程或新帖子。这是我使用普通POST请求的地方。我的API还允许用户相互发送消息。当用户收到我希望在浏览器中通知的消息时,我会使用websockets而不是每隔几秒轮询一次。
我的问题是
由于我已经与websocket打开了连接消息,我是否也应该使用此连接发送消息,创建新线程或帖子?
我是否可以使用POST请求创建消息和websockets以实时接收它们以及GET请求以获取消息历史记录?这是一个好习惯吗?
我正在使用django rest框架,它为我处理字段验证,如果我使用websocket创建资源而不是普通的POST请求,我将如何处理验证。
我在开发RESTfull API方面非常新,我只开始使用websockets进行开发。对不起任何对你来说似乎合乎逻辑的愚蠢的任务:)
由于
答案 0 :(得分:0)
因为我已经与websocket打开了连接消息 将来,我是否也应该使用此连接发送消息,创建 新帖子或帖子?
这取决于。如果您使用的是CQRS方法,并且您的写入由不同于读取的框处理,则您希望使用常规HTTP POST;或者如果必须为可能不支持WebSockets的外部调用者提供兼容性。
我可以使用POST请求创建要接收的消息和websockets 他们实时和GET请求获取消息的历史?这是 好的做法?
听起来很合理。您将获得REST兼容性和WebSocket作为增强功能。我所做的是使用WebSockets来增强REST API。有些操作分为两部分,例如" autocompletes"本质上是快速连续的调用并且属于读取模型可以通过两种方式完成,但是缺点是我无法利用内置输出缓存,我必须为它们实现自己的缓存。
我正在使用django rest框架,它处理字段的验证 对我来说,如果我使用创建资源,我将如何处理验证 websocket而不是普通的POST请求。
我不做django,但我猜你自己可以以某种方式挂钩验证,并在反序列化后在你的消息对象中调用它。
答案 1 :(得分:0)
关于第3个问题,最基本的解决方案看起来像
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消费者。