Я думаю о создании REST API как с веб-сокетами, так и с http, где я использую веб-сокеты, чтобы сообщить клиенту, что новые данные доступны, или напрямую предоставить новые данные клиенту.
Вот несколько вариантов того, как это может работать:
ws = websocket
Идея А:
- Дэвид получает всех пользователей с
GET /users
- Джейкоб добавить пользователя с
POST /users
- Всем клиентам отправляется сообщение ws с информацией о существовании нового пользователя.
- Дэвид получает сообщение от ws и звонит
GET /users
Идея Б:
- Дэвид получает всех пользователей с
GET /users
- Дэвид зарегистрируется, чтобы получать обновления ws, когда вносятся изменения в
/users
- Джейкоб добавить пользователя с
POST /users
- Новый пользователь отправляется Дэвиду с помощью ws
Идея С:
- Дэвид получает всех пользователей с
GET /users
- Дэвид зарегистрируется, чтобы получать обновления ws, когда вносятся изменения в
/users
- Джейкоб добавляет пользователя с
POST /users
и получает идентификатор 4 - Дэвид получает идентификатор 4 нового пользователя с помощью ws
- Дэвид получает нового пользователя с
GET /users/4
Я умер:
- Дэвид получает всех пользователей с
GET /users
- Дэвид регистрируется, чтобы получать обновления ws, когда изменения вносятся в
/users
. - Джейкоб добавить пользователя с
POST /users
- Дэвид получает сообщение ws о внесении изменений в
/users
- Давид получает только дельту по телефону
GET /users?lastcall='time of step one'
Какая альтернатива лучше, и каковы ее плюсы и минусы?
Является ли она еще лучшей «Идеей E»?
Нужно ли нам вообще использовать REST или ws достаточно для всех данных?
Изменить
Чтобы решить проблемы с рассинхронизацией данных, мы могли бы предоставить заголовок
"If-Unmodified-Since"
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since
или "E-Tag"
https://developer.mozilla.org/en-US/docs/Web/HTTP/Заголовки/ETag
или оба с запросами PUT.