跳至主要内容
版本:3.5.x

选择器

选择器用于确定HTTP请求或 WebSocket命令的目标设备会话

设备选择器 — URL 路径

用于所有设备级 HTTP 路由中,作为 /{device_type}/{id_or_index}/….

路线示例选择器的含义
inverse3/0FirstInverse3 索引排序(从 0 开始)
inverse3/A14Inverse3 设备 ID) A14
inverse3/*所有Inverse3 (通配符)
*inverse/*所有 Inverse 系列设备(Inverse3、Inverse3x、Minverse)
verse_grip/0首款带线VerseGrip(按索引排序)
wireless_verse_grip/*全无线 VerseGrips
*verse_grip/*所有VerseGrip系列设备(有线、无线、定制)

规则:

  • GET 不接受通配符选择器(存在歧义)→ 400
  • POSTDELETE 接受通配符 — 该操作将应用于所有匹配项

支持 {device_type} 值: inverse3, verse_grip, wireless_verse_grip, 或家族通配符 *inverse, *verse_grip.

会话选择器 — ?session=<expr> 查询参数

会话作用域的 HTTP 端点(basis、mount、preset、filters、navigation、SDF) 需要一个 ?session=<expr> 查询参数,用于确定在哪个会话上下文中 进行操作。

表达含义
(省略)所有会话(允许在 DELETE (仅限)
#123123ID 为 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 — 任何以 -update
  • co.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) 必须 以百分比编码的形式表示为 %3FGET /sessions/defaul%3F:0. 在查询形式的 选择器中 (?session=defaul?:0),仅限第一行 ? 将查询拆分为 后续 ? 字符将原样传递。

WebSocket 会话不需要选择器

在 WebSocket 连接中,你 本次会话 — 您的 configurecommands 条目会自动针对当前会话中的设备。会话 选择器仅在以下情况下需要: 超文本传输协定 请求(包括跨会话 远程控制 — 参见 会话).