Я разрабатываю REST API для трехуровневой системы, такой как: Client application-> Front-end API cloud server-> user's home API server (Home).
Homeявляется домашним устройством и должен поддерживать соединение Front-endчерез Websocket или длительный опрос (это первое место, где мы нарушаем REST. В дальнейшем это становится еще хуже) . Front-endв основном туннелирует Clientзапросы к Homeсоединению и обрабатывает некоторые вызовы сама. Иногда Homeотправляет уведомления Client.
Front-endи Homeимеют в основном один и тот же API; Clientможет быть подключение к Homeнапрямую через локальную сеть. В этом случае Homeнеобходимо зарегистрировать некоторые Clientдействия на Front-endсебя.
Плюсы для REST в этой системе:
- ОТДЫХ читается человеком;
- REST имеет четко определенное отображение глаголов (например, CRUD), существительных и кодов ответов на объекты протокола;
- Он работает по HTTP и передает все возможные прокси;
REST контрастами являются:
- Нам нужен не только стиль общения запрос-ответ, но и публикация-подписка;
- Коды ошибок HTTP могут быть недостаточны для обработки трехуровневых ошибок связи;
Front-endможет вернуться202 Acceptedк какому-либо асинхронному вызову только для того, чтобы узнать, что необходимоеHomeсоединение разорвано и должно было быть503; Homeнеобходимо отправлять сообщенияClient.Clientпридется опрашиватьFront-endили поддерживать связь.
Мы рассматриваем WAMP / Autobahn через Websocket, чтобы получить функциональность публикации / подписки, когда меня поразило, что это уже похоже на очередь сообщений.
Стоит ли оценивать своего рода очередь сообщений как транспорт?
Похоже, что очереди сообщений:
- Мне нужно самому определить глаголы CRUD и коды ошибок на уровне сообщений.
- Я читал кое-что о «более высокой стоимости обслуживания», но что это значит?
Насколько серьезны эти соображения?
@Jimmy Hoffaдействительный момент, спасибо. Это верно, но не полностью. Это общая база данных, хранилище и так далее. @Javierспасибо, это хорошая часть ответа.
@Mike Brownточно. Пожалуйста, сделай.