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 应该是什么样的?
我看到几个选项:
可能是一样的,localhost/users
。差异应该只在请求 headers (Upgrade: WebSocket
) 中。缺点是它可能会混淆,因为具有相同 URI 的请求 return 不同的响应取决于提供的 headers
localhost/users-ws
。这对我来说似乎有点难看,因为每次我们对 HTTP 请求有类似的 WS 请求时 API 都会增长
localhost/users/ws
。这打破了使用变量扩展 URI 的可能性,例如我们不能在这里使用 localhost/users/{id}
。
将所有 WS 请求存储在公共 ws
域下 - localhost/ws/users
。这也很丑陋,因为我们打破了 URI 中域的顺序,并且无法将具有 users
域的请求重定向到特定的处理程序
所以目前我没有看到没有明显缺点的选项:)
如果有人能提供任何像 Whosebug 或 GitHub WS 和 HTTP 一起使用的大项目的例子,那将非常有帮助。
我不知道 WebSocket 的任何通用命名约定,但对于 Web API,有一个命名约定以 /api/
开始路由,例如 api.example.com/api/users
.
按照这种做法,可以认为 example.com/ws/users
可能是一个合适的路线名称。
API 的 URI 命名最常见的方法是什么,它同时使用 HTTP 和 WebSocket 协议来处理类似的请求?有什么共同的约定吗?
假设我们有一个 HTTP 请求 returning collection 用户:
localhost/users
此请求应return 注册用户列表。 在类似的 WS 请求中,服务器应该打开 WebSocket 通道,并在每次更新列表(例如添加或删除用户等)时通过它向客户端发送用户列表。
WebSocket 请求的 URI 应该是什么样的?
我看到几个选项:
可能是一样的,
localhost/users
。差异应该只在请求 headers (Upgrade: WebSocket
) 中。缺点是它可能会混淆,因为具有相同 URI 的请求 return 不同的响应取决于提供的 headerslocalhost/users-ws
。这对我来说似乎有点难看,因为每次我们对 HTTP 请求有类似的 WS 请求时 API 都会增长localhost/users/ws
。这打破了使用变量扩展 URI 的可能性,例如我们不能在这里使用localhost/users/{id}
。将所有 WS 请求存储在公共
ws
域下 -localhost/ws/users
。这也很丑陋,因为我们打破了 URI 中域的顺序,并且无法将具有users
域的请求重定向到特定的处理程序
所以目前我没有看到没有明显缺点的选项:)
如果有人能提供任何像 Whosebug 或 GitHub WS 和 HTTP 一起使用的大项目的例子,那将非常有帮助。
我不知道 WebSocket 的任何通用命名约定,但对于 Web API,有一个命名约定以 /api/
开始路由,例如 api.example.com/api/users
.
按照这种做法,可以认为 example.com/ws/users
可能是一个合适的路线名称。