Задача заключается в следующем. Нужно реализовать api. Это api содержит два вида методов:
1) обычные (синхронные) методы, реализованные посредством REST-запросов, например
$.ajax({
method:'GET',
url: "localhost:8080/api/v1/some/resource",
data: {
param1: value1,
param2: value2
}
success: function(data) {
// do something...
}
});
2) подписки на события, реализованные посредством websocket, например используя stomp:
var socket = new SockJS('/api/stomp');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/api/v1/some/subscription', function(message){
console.log(message);
});
});
В серверном приложении используется Spring, соответственно использую стринговую реализацию Spring + WebSocket Api + Stomp.
Дело в том, что архитектура такая, что строго определенного списка таких подписок нет и не будет (потому что api предназначается для платформы, которая позволяет реализовывать различные прикладные задачи и ее модель генерируется динамически, соответственно список ресурсов тоже динамический).
Могу ли я как-то, используя Spring, сделать, чтобы при получении запроса на подписку, я в своем обработчике определял есть ли такая подписка, и только если подписка есть, подписывать клиента?
Так же для выполнения подписки от клиента могут понадобиться некоторые параметры. Как мне лучше передавать эти параметры? Прямо в строке '/api/v1/some/subscription?param1=value1¶m2=value2', или используя хедеры stomp-сообщения?