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

时间:2019-03-13 14:38:17

标签: rest api http websocket naming-conventions

最常见的API URI命名方法是使用HTTP和WebSocket协议处理相似的请求?有什么通用约定吗?

假设我们有一个HTTP请求返回用户集合:

localhost/users

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

WebSocket请求的URI应该如何?

我看到几个选项:

  1. 它可能是相同的,localhost/users。区别仅应在请求标头(Upgrade: WebSocket)中。缺点是,由于具有相同URI的请求根据提供的标头返回不同的响应,因此可能会造成混淆。

  2. localhost/users-ws。每当我对HTTP请求有类似的WS请求时,API都会增长,这对我来说似乎有点丑陋

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

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

因此,在星期一,我看不到没有明显缺点的选项:)

如果有人可以提供将WS和HTTP一起使用的大型项目(例如StackOverflow或GitHub)的示例,那将非常有帮助。

1 个答案:

答案 0 :(得分:0)

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

按照这种做法,可以说example.com/ws/users可能是一个适合使用的路由名称。