セレクタ
セレクタは、HTTPリクエストまたはWebSocketコマンドがどのデバイスおよび どのセッションを対象としているかを特定します。
デバイスセレクタ — URLパス
すべてのデバイスレベルのHTTPパスにおいて /{device_type}/{id_or_index}/… 形式として使用されます。
| 経路の例 | セレクタの意味 |
|---|---|
inverse3/0 | インデックス(0から始まる)に基づく最初のものInverse3 |
inverse3/A14 | デバイスIDが A14人Inverse3 |
inverse3/* | すべてのInverse3 デバイス(ワイルドカード) |
*inverse/* | すべてのInverseシリーズ製品(Inverse3 、Inverse3x、Minverse ) |
inverse3:left/0 | インデックス基準で最初の左利き Inverse3 |
*inverse:right/0 | インデックス基準で最初の右利き用Inverse シリーズデバイス |
verse_grip/0 | インデックス基準で最初の有線型VerseGrip |
wireless_verse_grip/* | すべてのワイヤレスVerseGrip |
*verse_grip/* | すべてのVerseGripシリーズ製品(有線、無線、カスタム) |
*verse_grip:custom/0 | インデックス基準で最初のカスタムVerseGrip(custom_verse_grip/0(上記と同様) |
クラスフィルターはインデックス作成の前に適用されます
<type>:<class>/<N> セレクタはまず クラスフィルターを適用した後、フィルタリングされた集合に対してインデックス作成を行います。 <N>は、元のデバイス一覧ではなく、フィルタリングされた一覧内の位置を指しています:
*inverse:left/0— 「左利き」Inverseシリーズのデバイスの中で0番目 デバイスです。3台のInverseデバイスが接続されている場合(右、左、右の順)、このセレクタは2番目のデバイスとして解釈されます。インデックス0まずデバイスを選んでから、「左利き用」という条件で絞り込むという方法ではありません。inverse3:right/0— 右利きInverse3 の 0番目のデバイス。*inverse:left/3— 左利き用Inverseシリーズのデバイスが4台未満接続されている場合、Inverseデバイス全体の台数が4台を超えていても404を返します。
同じルールはワイルドカードセレクタにも適用されます。 *inverse/*わあ *verse_grip/*は、当該シリーズの すべての デバイスと一致し、これらのセレクタを対象とする POST および DELETE リクエストは最初のデバイスだけでなく、 一致するすべての 変更をデバイスに反映します。
ルール:
GET(曖昧であるため)ワイルドカードセレクタを拒否します →400POSTわあDELETEワイルドカードが使用可能です — 操作は一致するすべてのデバイスに適用されます404回答はno device matches selector '<sel>'この形式を使用します。ここで<sel>これは、受信された元のセレクタ式です
対応している {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::で始まる最初のセッション(glob ワイルドカード) |
:co.haply.hub::*:-1 | co.haply.hub:: ネームスペースの最後のセッション |
例:
GET /inverse3/0/config/navigation?session=:default:0
プロフィール名のワイルドカード
プロファイルパターンでは、2種類のglobメタ文字が使用可能です:
| メタ文字 | 意味 |
|---|---|
* | 任意の文字列と一致します(空文字列を含む) |
? | 正確に1文字一致します |
それ以外のすべての文字(:, ., -, [, ] (含む)は文字通り一致します([abc]のような文字クラスは サポートされていません). 一致の判定では大文字と小文字が区別されます。
独占 *(または all)は従来通り すべてのセッションという意味です。名前は *で始まるプロフィールと一致させるには、1文字以上の異なる文字を含めてください(例: *foo).
役立つパターン:
co.haply.hub::*—co.haply.hub::その名前空間に属するすべてのプロフィール*-update—-updateで終わるすべてのプロフィールco.haply.*:*— 名前空間がco.haply.で始まるすべてのプロフィールdefaul?—defaulで始まる7文字のプロフィールすべて
ワイルドカードパターンは単独では 曖昧です(2つ以上のセッションに一致する可能性があります)。 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
インデックスのない曖昧なワイルドカードは、GET/POSTでは 400として拒否されます。複数のセッションとの一致を明示的に許可するパスでは許可されますが、これは 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> 接尾辞なしで曖昧なワイルドカードパターンを許可する数少ないエンドポイントの一つであり、 GET /sessionsのようなリストラッパー形式に一致するすべての項目を返します。
#42わあ *上記のすべてのセレクタ形式(含まれるプロファイルパターンを含む)は、標準のHTTPクライアント(Python requests, libhv, curl, fetch)をそのまま送信します。クライアント側でのURLエンコーディングは必要ありません。シェルでは # または *が含まれるトークンは引用符で囲んでください(例: --session "#42", --session "co.haply.hub::*:0"). そうすれば、シェルはこれをコメントとして扱ったり、ローカルファイルに対してglob展開を行ったりしません。
一つの例外: ? glob メタ文字は パスURL クエリの区切り文字です。パス形式のセレクタ(例: /sessions/defaul?:0)では %3Fパーセントエンコーディングを行う必要があります — GET /sessions/defaul%3F:0. クエリ形式セレクタ(?session=defaul?:0)では、最初の ?クエリを分割し、その後の ? メッセージは変更されることなく、そのまま送信されます。
WebSocket接続では、ユーザー自身がセッションそのものです。 configure および commands 項目は、現在のセッションのデバイスを自動的に対象とします。セッションセレクタは HTTP リクエスト(セッション間のリモート制御を含む、 セッション (参照)でのみ必要です。