Я разрабатываю 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
точно. Пожалуйста, сделай.