メインコンテンツへスキップ

セレクタ

セレクタは、HTTPリクエストや WebSocketコマンドの宛先となるデバイスやセッションを特定するために使用されます。

デバイスセレクター — URL パス​

すべてのデバイスレベルの HTTP ルーティングに使用され、形式は次のとおりです。 /{device_type}/{id_or_index}/…。

ルーティングの例セレクタの意味
inverse3/0インデックスに基づいて最初の要素を取得するInverse3(0から始まる)
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 — 0番目の左手 Inverse シリーズのデバイス。3台の Inverse デバイス(右、左、右)が接続されている場合、元のリストのインデックスではなく、 2番目のデバイスとして解釈されます。 0 「必ず左手である」という条件で再フィルタリングする。
  • inverse3:right/0 — 0番目の右手 Inverse3。
  • *inverse:left/3 — 接続されている左手用 Inverse デバイスが 4 つ未満の場合は、 404,たとえシステム内の Inverse デバイスの総数が 4 台を超えていても。

ワイルドカードセレクタも同様にこのルールに従います:*inverse/* 和 *verse_grip/* そのシリーズに含まれるものと一致する一つひとつ設備、これらのセレクタに対して POST / DELETE このリクエストにより、操作が適用されます一つひとつ一致した項目すべて、最初の1つだけではありません。

ルール:

  • GET ワイルドカードセレクタは拒否される(意味が不明確)→ 400
  • POST 和 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 あるいは 123ID 123 のセッション
:0インデックスに基づいて最初のセッションを取得する
:-1インデックスに基づいて最後のセッションを取得する
profile_nameこのプロファイルを使用する最初のセッション(曖昧な場合がある)
profile_name:0指定されたプロファイルのうち、インデックスが 0 の最初のセッション
:default:0profile は default また、インデックスが 0 の最初のセッション
co.haply.hub::*:0プロフィール: co.haply.hub:: 先頭(glob ワイルドカード)の最初のセッション
:co.haply.hub::*:-1co.haply.hub:: 名前空間内の最後のセッション

例:

GET /inverse3/0/config/navigation?session=:default:0

プロファイル 名称ワイルドカード​

profile モードでは、2 つの glob メタ文字がサポートされています:

メタ文字意味
*任意の文字列(空の文字列を含む)に一致する
?1文字に正確に一致する

その他のすべての文字――以下を含む :、.、-、[、]——すべて文字通りの一致(不文字クラスをサポートしています。例えば、 [abc])。大文字と小文字を区別して一致させます。

個別の *(あるいは all)は本来の意味を保ち、すなわちすべてのセッション。名称を一致させるには * 冒頭の「profile」には、少なくとももう1文字を含めてください(例: *foo)。

通常モード:

  • co.haply.hub::* — co.haply.hub:: 名前空間内の任意のプロファイル
  • *-update — 任意に -update 末尾のプロフィール
  • co.haply.*:* — 名前空間は co.haply. 先頭に「profile」を含む任意のプロファイル
  • defaul? — 任意に defaul 冒頭、全7文字のプロフィール

ワイルドカードパターンそのもの曖昧さがある(複数のセッションに一致する可能性があります)。もし 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>;2つのルーティングは、同じ処理関数を呼び出しています。GET /sessions/<sel> 省略が許される数少ない例の一つである :<index> サフィックス、曖昧性を許容するワイルドカードパターンを受け入れるエンドポイントの一つ――これは、 GET /sessions 同じリスト構造で、一致する項目をすべて返します。

セレクタをそのまま渡す

上記のすべてのセレクタの形式――以下を含む #42 および帯 * の profile モード――標準の HTTP クライアント(Python requests、libhv、curl、fetch)をそのまま転送します。クライアント側で URL エンコードを行う必要はありません。シェルでは、 # あるいは * パラメータは引用符で囲む(例: --session "#42"、--session "co.haply.hub::*:0"),これにより、シェルがこれをコメントと見なしたり、ローカルファイルに対するグロブ展開を行ったりするのを防ぐためです。

一つの例外:でパスその中で、? 「glob」メタ文字は、URL のクエリ区切り文字です。パス形式のセレクタ(例: /sessions/defaul?:0),これは次のようにエンコードされなければならない %3F、すなわち GET /sessions/defaul%3F:0。クエリ形式のセレクタ(?session=defaul?:0)のうち、最初のものだけ ? 「区切り検索」の部分については、その後の ? 文字はそのまま渡されます。

WebSocket セッションにはセレクタが不要です

WebSocket 接続では、あなたはつまり会話そのもの――あなたの configure 和 commands 項目は、現在のセッションのデバイスに自動的にリンクされます。ただし、 HTTP セッションセレクタが必要となるのはリクエストの場合のみです(セッションをまたぐリモート制御を含みます。詳しくは 会話)。