Каков наиболее распространенный подход к именованию URI для API, который использует протоколы HTTP и WebSocket для аналогичных запросов? Существуют ли общие правила для этого?
Предположим, у нас есть HTTP-запрос, возвращающий коллекцию пользователей:
localhost/users
Этот запрос должен возвращать список зарегистрированных пользователей.
По аналогичному запросу WS сервер должен открыть канал WebSocket и отправлять клиенту список пользователей по нему каждый раз, когда список обновляется (например, пользователь был добавлен или удален и т. Д.).
Как должен выглядеть URI для запроса WebSocket?
Я вижу несколько вариантов:
Это может быть то же самое, localhost/users
. Разница должна быть только в заголовках запросов (Upgrade: WebSocket
). Недостатком является то, что это может сбивать с толку, поскольку запросы с одним и тем же URI возвращают разные ответы в зависимости от предоставленных заголовков
localhost/users-ws
. Это кажется мне немного уродливым, так как API растет с каждым разом, когда у нас аналогичный WS-запрос для HTTP-запроса
localhost/users/ws
. Это исключает возможность расширения URI переменной, например, мы не можем использовать localhost/users/{id}
здесь, не более.
Хранить все запросы WS в общем домене ws
- localhost/ws/users
. Это также ужасно, поскольку мы нарушаем порядок доменов в URI и не можем перенаправлять запросы с users
доменом на определенный обработчик
Так что на данный момент я не вижу варианта без явных недостатков:)
Если кто-то может привести примеры крупных проектов, таких как StackOverflow или GitHub, где WS и HTTP используются вместе, это будет очень полезно.