API 同时使用 HTTP 和 WebSockets 时的命名约定

API naming conventions when using both HTTP and WebSockets

API 的 URI 命名最常见的方法是什么,它同时使用 HTTP 和 WebSocket 协议来处理类似的请求?有什么共同的约定吗?

假设我们有一个 HTTP 请求 returning collection 用户:

localhost/users

此请求应return 注册用户列表。 在类似的 WS 请求中,服务器应该打开 WebSocket 通道,并在每次更新列表(例如添加或删除用户等)时通过它向客户端发送用户列表。

WebSocket 请求的 URI 应该是什么样的?

我看到几个选项:

  1. 可能是一样的,localhost/users。差异应该只在请求 headers (Upgrade: WebSocket) 中。缺点是它可能会混淆,因为具有相同 URI 的请求 return 不同的响应取决于提供的 headers

  2. localhost/users-ws。这对我来说似乎有点难看,因为每次我们对 HTTP 请求有类似的 WS 请求时 API 都会增长

  3. localhost/users/ws。这打破了使用变量扩展 URI 的可能性,例如我们不能在这里使用 localhost/users/{id}

  4. 将所有 WS 请求存储在公共 ws 域下 - localhost/ws/users。这也很丑陋,因为我们打破了 URI 中域的顺序,并且无法将具有 users 域的请求重定向到特定的处理程序

所以目前我没有看到没有明显缺点的选项:)

如果有人能提供任何像 Whosebug 或 GitHub WS 和 HTTP 一起使用的大项目的例子,那将非常有帮助。

我不知道 WebSocket 的任何通用命名约定,但对于 Web API,有一个命名约定以 /api/ 开始路由,例如 api.example.com/api/users.

按照这种做法,可以认为 example.com/ws/users 可能是一个合适的路线名称。