REST API 聊天 - real-time 获取消息的端点
REST API chat - endpoint for real-time fetching messages
我有一个由 express+mongodb 提供支持的 REST API 服务器。有几个端点具有不同的资源。其中之一是聊天 API。我已经有几个基本端点,例如:
POST http://api.example.com/v1/chat
- 创建聊天
POST http://api.example.com/v1/chat/:id/message
- 向现有聊天发送消息
GET http://api.example.com/v1/chat/:id/messages
- 获取指定聊天中的消息
但我需要为 API 消费者提供一种无需重新加载页面即可有效地在 real-time 中获取新消息 的方法。
目前如您所见,可以仅从客户端轮询 GET
端点,但它似乎性能不佳。 例如,客户端可以有 UI,它将在 header 中显示新消息计数(某种通知)。
我在考虑 websockets。例如,是否可以提供像 /chat/:id/subscribe
这样的端点,它将代理套接字的服务器并在客户端连接到它?
是否有一些这样的 API 设计的好例子,我可以从中获得灵感,或者您可以给我一些建议?谢谢!
socket.io 就是您要找的包裹。
其文档中的 namespace 部分是一个很好的解决方案,因为命名空间可以受到授权保护。它代表一个连接的套接字池。
我会这样做:
使用此路由为两个用户之间的聊天创建文档:
POST http://api.example.com/v1/chat
当一个用户向另一个已连接的用户发送消息时,使用 socket.io 创建一个命名空间,并将其存储到数据库中您的用户文档中。此路由将创建一个命名空间 and/or 发出消息:
POST http://api.example.com/v1/chat/:id/message
在客户端中,您必须再次使用socket.io来收听命名空间中的消息。
可扩展性更新:
这里有一个关于实现可扩展聊天服务器的很好的 Whosebug 回答问题:Strategy to implement a scalable chat server
如您在此 post 中所见,mongodb 可能不是存储消息的最佳解决方案。
我有一个由 express+mongodb 提供支持的 REST API 服务器。有几个端点具有不同的资源。其中之一是聊天 API。我已经有几个基本端点,例如:
POST http://api.example.com/v1/chat
- 创建聊天POST http://api.example.com/v1/chat/:id/message
- 向现有聊天发送消息GET http://api.example.com/v1/chat/:id/messages
- 获取指定聊天中的消息
但我需要为 API 消费者提供一种无需重新加载页面即可有效地在 real-time 中获取新消息 的方法。
目前如您所见,可以仅从客户端轮询 GET
端点,但它似乎性能不佳。 例如,客户端可以有 UI,它将在 header 中显示新消息计数(某种通知)。
我在考虑 websockets。例如,是否可以提供像 /chat/:id/subscribe
这样的端点,它将代理套接字的服务器并在客户端连接到它?
是否有一些这样的 API 设计的好例子,我可以从中获得灵感,或者您可以给我一些建议?谢谢!
socket.io 就是您要找的包裹。
其文档中的 namespace 部分是一个很好的解决方案,因为命名空间可以受到授权保护。它代表一个连接的套接字池。
我会这样做:
使用此路由为两个用户之间的聊天创建文档:
POST http://api.example.com/v1/chat
当一个用户向另一个已连接的用户发送消息时,使用 socket.io 创建一个命名空间,并将其存储到数据库中您的用户文档中。此路由将创建一个命名空间 and/or 发出消息:
POST http://api.example.com/v1/chat/:id/message
在客户端中,您必须再次使用socket.io来收听命名空间中的消息。
可扩展性更新:
这里有一个关于实现可扩展聊天服务器的很好的 Whosebug 回答问题:Strategy to implement a scalable chat server
如您在此 post 中所见,mongodb 可能不是存储消息的最佳解决方案。