选择器
选择器用于确定HTTP请求或 WebSocket命令的目标设备及会话。
设备选择器 — URL 路径
用于所有设备级 HTTP 路由中,作为 /{device_type}/{id_or_index}/….
| 路线示例 | 选择器的含义 |
|---|---|
inverse3/0 | FirstInverse3 索引排序(从 0 开始) |
inverse3/A14 | Inverse3 设备 ID) A14 |
inverse3/* | 所有Inverse3 (通配符) |
*inverse/* | 所有 Inverse 系列设备(Inverse3、Inverse3x、Minverse) |
verse_grip/0 | 首款带线VerseGrip(按索引排序) |
wireless_verse_grip/* | 全无线 VerseGrips |
*verse_grip/* | 所有VerseGrip系列设备(有线、无线、定制) |
规则:
GET不接受通配符选择器(存在歧义)→400POST和DELETE接受通配符 — 该操作将应用于所有匹配项
支持 {device_type} 值: inverse3, verse_grip, wireless_verse_grip,
或家族通配符 *inverse, *verse_grip.
会话选择器 — ?session=<expr> 查询参数
会话作用域的 HTTP 端点(basis、mount、preset、filters、navigation、SDF)
需要一个 ?session=<expr> 查询参数,用于确定在哪个会话上下文中
进行操作。
| 表达 | 含义 |
|---|---|
| (省略) | 所有会话(允许在 DELETE (仅限) |
#123 或 123 | ID 为 123 的会话 |
:0 | 按索引排列的第一节 |
:-1 | 按索引查看上一节 |
profile_name | 首次使用此配置文件(可能存在歧义) |
profile_name:0 | 首次会话,包含个人资料 + 索引 0 |
:default:0 | 首次会话(使用个人资料) default 在索引 0 处 |
co.haply.hub::*:0 | 第一个会话的简介以 co.haply.hub:: (通配符) |
:co.haply.hub::*:-1 | 上一节在 co.haply.hub:: 命名空间 |
示例:
GET /inverse3/0/config/navigation?session=:default:0
配置文件名称通配符
配置文件模式支持两种通配符:
| 元字符 | 含义 |
|---|---|
* | 匹配任何字符序列(包括空字符串) |
? | 匹配一个字符 |
其他所有角色——包括 :, ., -, [, ] — 按字面匹配(字符类
如 [abc] 是 不 (受支持)。匹配操作区分大小写。
一个光秃秃的 * (或 all) 保留其原有的含义,即 所有会议. 匹配名称
以 *,请包含至少一个其他字符(例如 *foo).
常用模式:
co.haply.hub::*— 该列表中的任何个人资料co.haply.hub::命名空间*-update— 任何以-updateco.haply.*:*— 任何命名空间以co.haply.defaul?— 任何以defaul
通配符模式是 模棱两可 单独使用(它可以匹配多个会话)。要在
一个 GET / POST 端点,通过尾部内容消除歧义 :<index>:
# First session in the Haply Hub namespace
GET /inverse3/0/config/basis?session=co.haply.hub::*:0
# Last session in a Unity namespace
GET /inverse3/0/config/mount?session=:co.haply.unity::*:-1
含糊通配符(无索引)将被拒绝,具体表现为 400 在 GET/POST 请求中。在明确支持多会话匹配的路由中,这些请求会被允许—— GET /sessions/<sel> (返回所有匹配项)以及
DELETE 端点(应用于每次匹配)。
会话选择器 — URL 路径
"(《世界人权宣言》) /sessions/{selector} 端点接受 与路径
参数相同的表达式 — 适用于查询单个会话或验证该会话
是否存在:
GET /sessions # list all active sessions
GET /sessions/:default:0 # one session by profile + index
GET /sessions/:-1 # last active session
GET /sessions/#42 # session id 42
GET /sessions/co.haply.hub::* # every session in the co.haply.hub:: namespace
GET /sessions/co.haply.hub::*:0 # first session in that namespace
这在功能上等同于 GET /sessions?session=<selector>; 这两条
路由都会调用同一个处理程序。 GET /sessions/<sel> 是少数几个
能够容忍不带
的模糊通配符模式的端点之一 :<index> 后缀 — it
将所有匹配项返回至与 GET /sessions.
上述所有选择器表单——包括 #42 以及轮廓图案,使用 * —
由标准 HTTP 客户端原样传输(Python requests, libhv,
curl, fetch). 无需进行客户端 URL 编码。在 shell 中,请对
包含 # 或 * (例如: --session "#42", --session "co.haply.hub::*:0")
以防止 shell 将其视为注释,或对其进行通配符展开
以匹配本地文件。
一个例外:该 ? 通配符 `glob` 是 URL 查询的分隔符
在 路径. 在路径形式的选择器中(例如 /sessions/defaul?:0) 必须
以百分比编码的形式表示为 %3F — GET /sessions/defaul%3F:0. 在查询形式的
选择器中 (?session=defaul?:0),仅限第一行 ? 将查询拆分为
后续 ? 字符将原样传递。
在 WebSocket 连接中,你 是 本次会话 — 您的 configure 和
commands 条目会自动针对当前会话中的设备。会话
选择器仅在以下情况下需要: 超文本传输协定 请求(包括跨会话
远程控制 — 参见 会话).