А может для Single Page Application взять да и подзабить на все эти REST интерфейсы, написать клиентский и серверный диспетчеры типов сообщений и все гонять JSONом через веб-сокет.
Абстракция предлагается следующая. Клиент создает нечто названное «stream» у которого есть ID. Он сразу регистрирует событие onStreamMessage. Тоесть в классическом понимании - это не коллбек, это множество инвокаций коллбеков если сервер отправит много сообщений с этим ID. Получаем абстракцию для простого и привычного нам запроса, но и бесконечный стриминг ответов, таких как чат или push нотификации.
Большим плюсом есть фоллбек на Server Side Events прозрачно для пользователя. Тогда отправка будет идти таки через REST. Socket.io? Socket.io
Плюс heartbeats с нотификацией смерти стрима, ну и raw data messaging между браузерами клиентов через WebRTC согласно такой же абстракции.
А ведь такая же вещь может иметь место и на сервере, но о это нужно более подробно подумать.
Среди минусов вижу отсутствие HTTP кеширования и говнобраузеры.
Вот скажите, такая абстракция разве не была бы удобнее для программирования Web 100500.0
var myChats = {};
client.startStream("Hi there", function(id){
myChats[id] = "Hurray";
client.onStreamMessage(function(msg){
console.log(msg);
return false; // kill the callback, just a single message
})
});
client.query("Hi there", function(msg){ // same thing, but you don't need to know an id
console.log(msg);
})
client.query("Lets chat", function(msg){
mychat.items.push(msg.text);
return true;
});