Zum Hauptinhalt springen

Selektor

Selektoren dienen dazu,das Zielgerätund die Sitzungeiner HTTP-Anfrage oder eines WebSocket-Befehls zu identifizieren.

Geräteauswahl – URL-Pfad​

Wird für das gesamte HTTP-Routing auf Geräteebene verwendet, im Format /{device_type}/{id_or_index}/…。

Beispiel für eine RoutenführungBedeutung der Selektoren
inverse3/0Den ersten Eintrag anhand des Index abrufen: Inverse3(beginnend bei 0)
inverse3/A14Die Geräte-ID lautet A14 的 Inverse3
inverse3/*Alle Geräte unter Inverse3 (Platzhalter)
*inverse/*Alle Geräte der Inverse-Serie (Inverse3, Inverse3x,Minverse)
inverse3:left/0Den ersten Eintrag aufder linken Seite anhand des Index abrufenInverse3
*inverse:right/0Das erste Gerät der Inverse-Serie nach dem Indexauf der rechten Seite
verse_grip/0Den ersten „VerseGrip“ aus dem Index auswählen
wireless_verse_grip/*Alle kabellosen VerseGrip-Modelle
*verse_grip/*Alle Geräte der VerseGrip-Serie (kabelgebunden, kabellos, kundenspezifisch)
*verse_grip:custom/0Den ersten benutzerdefinierten VerseGrip anhand des Index abrufen (entspricht custom_verse_grip/0)

Klassenfilter werden vor der Indexauswertung ausgewertet​

<type>:<class>/<N> Der Selektor wirdzuerstWenden Sie einen Filter an und erstellen Sie anschließend einen Index für die gefilterte Menge.<N> Bezieht sich auf die Position in der gefilterten Liste und nicht auf die Position in der ursprünglichen Geräteliste:

  • *inverse:left/0 — Die 0. linke Hand Geräte der Inverse-Serie. Wenn drei Inverse-Geräte angeschlossen sind (rechts, links, rechts), wird das zweite Gerät ausgewertet, anstatt den Index der ursprünglichen Liste zu verwenden 0 Erneut nach „Muss linkshändig sein“ filtern.
  • inverse3:right/0 — Die 0. rechte Hand Inverse3。
  • *inverse:left/3 — Wenn weniger als vier „Inverse“-Geräte an der linken Seite angeschlossen sind, wird Folgendes zurückgegeben: 404, selbst wenn die Gesamtzahl der Inverse-Geräte im System vier übersteigt.

Auch Platzhalter-Selektoren folgen dieser Regel:*inverse/* und *verse_grip/* die mit dieser Serie übereinstimmenJedes einzelneGeräte, speziell für diese Selektoren POST / DELETE Durch die Anfrage wird die Aktion aufJedes einzelneTreffer, nicht nur den ersten.

Regeln:

  • GET Wird ein Platzhalter-Selektor abgelehnt (Bedeutung unklar) → 400
  • POST und DELETE Platzhalter zulassen – Die Aktion wird auf alle Übereinstimmungen angewendet
  • 404 Verwendung no device matches selector '<sel>' im Format, wobei <sel> Für den erhaltenen ursprünglichen Selektorausdruck

Unterstützt {device_type} Wert: inverse3、verse_grip、wireless_verse_grip, oder ein Serienplatzhalter *inverse、*verse_grip。

Sitzungsauswahl — ?session=<expr> Abfrageparameter​

HTTP-Endpunkte auf Sitzungsebene (basis, mount, preset, filters, navigation, SDF) erfordern ?session=<expr> Abfrageparameter, um den Sitzungskontext anzugeben, in dem die Operation ausgeführt wird.

AusdruckBedeutung
(Auslassung)Alle Sitzungen (dürfen nur verwendet werden für DELETE)
#123 oder 123Sitzung mit der ID 123
:0Die erste Sitzung anhand des Index abrufen
:-1Die letzte Sitzung anhand des Index abrufen
profile_nameDie erste Sitzung, die dieses Profil verwendet (möglicherweise mehrdeutig)
profile_name:0Die erste Sitzung mit dem angegebenen Profil und dem Index 0
:default:0Profil für default und zwar die erste Sitzung mit dem Index 0
co.haply.hub::*:0Profil mit co.haply.hub:: Die erste Sitzung, die mit (glob-Platzhalter) beginnt
:co.haply.hub::*:-1co.haply.hub:: Die letzte Sitzung im Namensraum

Beispiel:

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

Profil: Platzhalter für Namen​

Der Profilmodus unterstützt zwei Glob-Metazeichen:

MetazeichenBedeutung
*Übereinstimmung mit einer beliebigen Zeichenfolge (einschließlich der leeren Zeichenfolge)
?Genau ein Zeichen übereinstimmen

Alle anderen Zeichen – einschließlich :、.、-、[、]——Es wird jeweils eine wörtliche Übereinstimmung gesucht (neinUnterstützt Zeichenklassen, wie z. B. [abc]). Bei der Suche wird zwischen Groß- und Kleinschreibung unterschieden.

separat *(oder all) behält seine ursprüngliche Bedeutung bei, nämlichAlle Sitzungen。Um nach Namen zu suchen, die mit * Das Profil am Anfang sollte mindestens ein weiteres Zeichen enthalten (z. B. *foo).

Häufig verwendete Modi:

  • co.haply.hub::* — co.haply.hub:: beliebiges Profil im Namensraum
  • *-update — Beliebig mit -update Profil am Ende
  • co.haply.*:* — Der Namensraum beginnt mit co.haply. Ein beliebiges Profil, das mit „开头“ beginnt
  • defaul? — Beliebig mit defaul Anfang, insgesamt 7 Zeichen im Profil

Platzhaltermuster an sichEs besteht eine Mehrdeutigkeit(Es können mehrere Sitzungen übereinstimmen.) Wenn Sie GET / POST Zur Verwendung auf einem Endpunkt fügen Sie bitte am Ende Folgendes hinzu: :<index> Zur Vermeidung von Missverständnissen:

# 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

Mehrdeutige Platzhalter ohne Index werden bei GET/POST 400 Ablehnen. Auf Routen, die ausdrücklich Multi-Session-Matching zulassen, ist die Verwendung jedoch erlaubt –GET /sessions/<sel>(Alle Treffer anzeigen) und DELETE Endpunkt (gilt für alle Treffer).

Sitzungsauswahl – URL-Pfad​

/sessions/{selector} Endpunkt akzeptiert undAusdrücke mit identischen Pfadparametern——Dient dazu, eine einzelne Sitzung abzufragen oder zu überprüfen, ob sie existiert:

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

Dies entspricht funktional GET /sessions?session=<selector>; Beide Routen rufen dieselbe Verarbeitungsfunktion auf.GET /sessions/<sel> Es gehört zu den wenigen Fällen, in denen eine Auslassung zulässig ist :<index> Eine der Endpunkte, die Suffixe und mehrdeutige Platzhaltermuster akzeptieren – sie verhält sich wie GET /sessions Die gleiche Listenstruktur gibt alle Treffer zurück.

Selektor „Unverändert weitergeben“

Alle oben genannten Selektorformen – einschließlich #42 sowie mit * Das Profil-Modell – wird von einem Standard-HTTP-Client (Python) requests、libhv、curl、fetch) unverändert übertragen. Eine URL-Kodierung auf dem Client ist nicht erforderlich. Geben Sie in der Shell den Befehl ein, der # oder * Die Parameter in Anführungszeichen setzen (z. B. --session "#42"、--session "co.haply.hub::*:0"), um zu verhindern, dass die Shell dies als Kommentar interpretiert oder eine Glob-Erweiterung für lokale Dateien durchführt.

Eine Ausnahme: inPfaddarin,? Das Sonderzeichen „glob“ dient als Trennzeichen für URL-Abfragen. In Selektoren im Pfadformat (z. B. /sessions/defaul?:0), muss es wie folgt kodiert werden: %3F, d. h. GET /sessions/defaul%3F:0。Der Selektor in der Abfrageform (?session=defaul?:0) davon ist nur der erste ? Der Abfrageteil wird getrennt, die nachfolgenden ? Zeichen werden unverändert weitergegeben.

Für WebSocket-Sitzungen ist kein Selektor erforderlich

Bei einer WebSocket-Verbindung kannst duDas heißtDas Gespräch selbst – dein configure und commands Der Eintrag verweist automatisch auf das Gerät der aktuellen Sitzung. Nur HTTP Ein Session-Selektor wird nur bei Anfragen benötigt (einschließlich sitzungsübergreifender Fernsteuerung, siehe Gespräch).