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ührung | Bedeutung der Selektoren |
|---|---|
inverse3/0 | Den ersten Eintrag anhand des Index abrufen: Inverse3(beginnend bei 0) |
inverse3/A14 | Die 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/0 | Den ersten Eintrag aufder linken Seite anhand des Index abrufenInverse3 |
*inverse:right/0 | Das erste Gerät der Inverse-Serie nach dem Indexauf der rechten Seite |
verse_grip/0 | Den 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/0 | Den 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 verwenden0Erneut 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:
GETWird ein Platzhalter-Selektor abgelehnt (Bedeutung unklar) →400POSTundDELETEPlatzhalter zulassen – Die Aktion wird auf alle Übereinstimmungen angewendet404Verwendungno 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.
| Ausdruck | Bedeutung |
|---|---|
| (Auslassung) | Alle Sitzungen (dürfen nur verwendet werden für DELETE) |
#123 oder 123 | Sitzung mit der ID 123 |
:0 | Die erste Sitzung anhand des Index abrufen |
:-1 | Die letzte Sitzung anhand des Index abrufen |
profile_name | Die erste Sitzung, die dieses Profil verwendet (möglicherweise mehrdeutig) |
profile_name:0 | Die erste Sitzung mit dem angegebenen Profil und dem Index 0 |
:default:0 | Profil für default und zwar die erste Sitzung mit dem Index 0 |
co.haply.hub::*:0 | Profil mit co.haply.hub:: Die erste Sitzung, die mit (glob-Platzhalter) beginnt |
:co.haply.hub::*:-1 | co.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:
| Metazeichen | Bedeutung |
|---|---|
* | Ü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-updateProfil am Endeco.haply.*:*— Der Namensraum beginnt mitco.haply.Ein beliebiges Profil, das mit „开头“ beginntdefaul?— Beliebig mitdefaulAnfang, 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.
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.
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).