Currently there are inconsistencies in how REST and mdp/mds URLs are mapped to majordomo messages and how service names and queries are supposed to look like (see also #331).
We discussed that
service names must always start with a slash and can have sub paths. (valid: /GnuRadio/Acquisition, /dashboards/dashboard1; invalid: dashboards)
The "endpoint" frame contains only the query part "?foo&bar" (TBD: with or without leading ?? for now, probably with, to make it work with our URI implementation)
For subscriptions, subpaths/topics are not supported, only query parameters can be used to filter (Invalid for subscription "/dashboards/dashboard1")
For ZMQ PUB/SUB, /serviceName?query will be used, with sorted params (as ZMQ does string matching)
Examples:
(mds/mdp follows the same scheme as REST and is thus omitted)
The broker's service name matching is used so that /dasboards/dashboard1 reaches the /dashboards worker (which then parses the "dashboard1" from the service Name)
Ensure that
The implementation of subscription, GET/SET, REST, mdp/mds clients, Workers and Broker follows the above description
All unit tests in opencmw-cpp and usages in opendigitizer (unit tests and UI) reflect the intended behavior described above and work
Document the intended behavior and give examples in the README
Currently there are inconsistencies in how REST and mdp/mds URLs are mapped to majordomo messages and how service names and queries are supposed to look like (see also #331).
We discussed that
/GnuRadio/Acquisition
,/dashboards/dashboard1
; invalid:dashboards
)?
? for now, probably with, to make it work with our URI implementation)/serviceName?query
will be used, with sorted params (as ZMQ does string matching)Examples: (mds/mdp follows the same scheme as REST and is thus omitted)
Subscription to http://localhost:8080/GnuRadio/Acquisition?signal=test&acquisitionMode=streaming
/GnuRadio/Acquisition
?signal=test&acquisitionMode=streaming
(arbitrary param order)/GnuRadio/Acquisition?acquisitionMode=streaming&signal=test
(sorted params)GET/SET to http://localhost:8080/dashboards/dashboard1
/dashboards/dashboard1
/dasboards/dashboard1
reaches the/dashboards
worker (which then parses the "dashboard1" from the service Name)Ensure that