Соглашения об именах API при использовании как HTTP, так и WebSockets - PullRequest
1 голос
/ 13 марта 2019

Каков наиболее распространенный подход к именованию URI для API, который использует протоколы HTTP и WebSocket для аналогичных запросов? Существуют ли общие правила для этого?

Предположим, у нас есть HTTP-запрос, возвращающий коллекцию пользователей:

localhost/users

Этот запрос должен возвращать список зарегистрированных пользователей. По аналогичному запросу WS сервер должен открыть канал WebSocket и отправлять клиенту список пользователей по нему каждый раз, когда список обновляется (например, пользователь был добавлен или удален и т. Д.).

Как должен выглядеть URI для запроса WebSocket?

Я вижу несколько вариантов:

  1. Это может быть то же самое, localhost/users. Разница должна быть только в заголовках запросов (Upgrade: WebSocket). Недостатком является то, что это может сбивать с толку, поскольку запросы с одним и тем же URI возвращают разные ответы в зависимости от предоставленных заголовков

  2. localhost/users-ws. Это кажется мне немного уродливым, так как API растет с каждым разом, когда у нас аналогичный WS-запрос для HTTP-запроса

  3. localhost/users/ws. Это исключает возможность расширения URI переменной, например, мы не можем использовать localhost/users/{id} здесь, не более.

  4. Хранить все запросы WS в общем домене ws - localhost/ws/users. Это также ужасно, поскольку мы нарушаем порядок доменов в URI и не можем перенаправлять запросы с users доменом на определенный обработчик

Так что на данный момент я не вижу варианта без явных недостатков:)

Если кто-то может привести примеры крупных проектов, таких как StackOverflow или GitHub, где WS и HTTP используются вместе, это будет очень полезно.

1 Ответ

0 голосов
/ 31 марта 2019

Мне не известны какие-либо общие соглашения по присвоению имен для WebSockets, но для веб-API существует соглашение по присвоению имен для начала маршрута с /api/, пример api.example.com/api/users.

Следуя этой практике, можно утверждать, что example.com/ws/users может быть подходящим названием маршрута для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...