Zum Haupttext springen

Selektor

Der Selektor gibt an, auf welches Gerät und welche Sitzungsich eine HTTP-Anfrage oder ein WebSocket-Befehl bezieht.

Geräteauswahl – URL-Pfad​

In allen HTTP-Pfaden auf Geräteebene /{device_type}/{id_or_index}/… Es wird als Format verwendet.

Beispiel für einen PfadBedeutung des Selektors
inverse3/0Der erste Eintrag (Indizierung beginnt bei 0) Inverse3
inverse3/A14Die Geräte-ID lautet A14in Inverse3
inverse3/*Alle Geräte unter Inverse3 (Platzhalter)
*inverse/*Alle Geräte der Inverse-Serie (Inverse3, Inverse3x, Minverse)
inverse3:left/0Der erste Linkshänder in der Rangliste Inverse3
*inverse:right/0Das erste Gerät der Inverse-Serie für Rechtshänder (nach Index)
verse_grip/0Erster kabelgebundener VerseGrip gemäß Index
wireless_verse_grip/*Alle kabellosen VerseGrip-Modelle
*verse_grip/*Alle Geräte der VerseGrip-Serie (kabelgebunden, kabellos, kundenspezifisch)
*verse_grip:custom/0Der erste benutzerdefinierte VerseGrip nach Index (custom_verse_grip/0(wie oben)

Der Klassenfilter wird vor der Indizierung angewendet.​

<type>:<class>/<N> Der Selektor wählt zunächst KlassenfilterAnschließend wird die gefilterte Menge indiziert. <N>bezieht sich nicht auf die ursprüngliche Geräteliste, sondern auf die Position in der gefilterten Liste:

  • *inverse:left/0 — Das 0. Gerät der „Inverse“-Serie für Linkshänder Gerät. Sind drei Inverse-Geräte miteinander verbunden (in der Reihenfolge: rechte Hand, linke Hand, rechte Hand), wird dieser Selektor als das zweite Gerät interpretiert. Index 0Es geht nicht darum, zuerst ein Gerät auszuwählen und dann nach „muss für Linkshänder geeignet sein“ zu filtern.
  • inverse3:right/0 — Rechtshänder Inverse3 , Gerät Nr. 0.
  • *inverse:left/3 — Wenn weniger als vier Geräte der Inverse-Serie für Linkshänder angeschlossen sind, gilt dies auch dann, wenn die Gesamtzahl der Inverse-Geräte vier übersteigt, 404gibt zurück.

Die gleiche Regel gilt auch für Wildcard-Selektoren. *inverse/*Wow *verse_grip/*ist das entsprechende Modell der alle die mit dem Gerät übereinstimmen und auf die diese Selektoren abzielen POST sowie DELETE Die Anfrage betrifft nicht nur das erste Gerät, sondern alle übereinstimmenden Die Änderungen werden auf das Gerät angewendet.

Regeln:

  • GET„은“ (da es mehrdeutig ist) wird als Platzhalter-Selektor abgelehnt → 400
  • POSTWow DELETEerlaubt Platzhalter – die Aktion wird auf alle übereinstimmenden Geräte angewendet
  • 404 Die Antwort lautet no device matches selector '<sel>' Verwenden Sie das Format. Hier <sel>Dies ist der ursprünglich empfangene Selektorausdruck.

Unterstützt {device_type} Wert: inverse3, verse_grip, wireless_verse_grip, oder ein Serien-Platzhalter *inverse, *verse_grip.

Sitzungsselektor — ?session=<expr> Abfrageparameter​

HTTP-Endpunkte im Sitzungsbereich (basis, mount, preset, filters, navigation, SDF) dienen dazu, zu ermitteln, in welchem Sitzungskontext gearbeitet werden soll. ?session=<expr> Es sind Abfrageparameter erforderlich.

AusdruckBedeutung
(Auslassung)Alle Sitzungen (DELETE(nur dort zulässig)
#123 oder 123Die Sitzung mit der ID 123
:0Erste Sitzung gemäß Index
:-1Letzte Sitzung gemäß Index
profile_nameDie erste Sitzung mit diesem Profil (kann mehrdeutig sein)
profile_name:0Die Sitzung mit dem Index 0 unter den Sitzungen mit diesem Profil
:default:0Profil defaultdie Sitzung mit dem Index 0 unter den Sitzungen mit …
co.haply.hub::*:0Das Profil co.haply.hub::Die erste Sitzung, die mit „“ beginnt (glob-Platzhalter)
:co.haply.hub::*:-1co.haply.hub:: Die letzte Sitzung im Namespace

Beispiel:

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

Profilname-Platzhalter​

Profilmuster lassen zwei Glob-Metazeichen zu:

MetazeichenBedeutung
*Stimmt mit einer beliebigen Zeichenfolge überein (einschließlich der leeren Zeichenfolge)
?Stimmt genau mit einem Zeichen überein

Alle übrigen Zeichen (:, ., -, [, ] (einschließlich) stimmt wörtlich überein ([abc]Zeichenklassen wie Wird nicht unterstützt). Bei der Überprüfung der Übereinstimmung wird zwischen Groß- und Kleinschreibung unterschieden.

Exklusiv *(oder all) bleibt wie bisher Alle Sitzungenbedeutet. Der Name *Um eine Übereinstimmung mit einem Profil zu erzielen, das mit „“ beginnt, fügen Sie mindestens ein weiteres Zeichen ein (z. B.: *foo).

Nützliche Muster:

  • co.haply.hub::* — co.haply.hub:: Alle Profile, die zu diesem Namespace gehören
  • *-update — -updateAlle Profile, die mit … enden
  • co.haply.*:* — Der Namespace ist co.haply.Alle Profile, die mit … beginnen
  • defaul? — defaulAlle Profile, die mit … beginnen und 7 Zeichen lang sind

Platzhaltermuster sind für sich genommen Das ist unklar.(Es können zwei oder mehr Sitzungen übereinstimmen). GET / POST Zur Verwendung auf dem Endpunkt am Ende :<index>… hinzufügen, um das Ziel eindeutig zu spezifizieren:

# 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 400wird abgelehnt. In Pfaden, in denen die Übereinstimmung mit mehreren Sitzungen ausdrücklich zugelassen ist, ist dies zulässig, was GET /sessions/<sel>(alle übereinstimmenden Einträge zurückgeben) und DELETE Endpunkt (gilt für alle übereinstimmenden Objekte).

Sitzungsselektor – URL-Pfad​

/sessions/{selector} Ein Endpunkt ist Ein Ausdruck, der mit dem Pfadparameter identisch istermöglicht. Dies ist nützlich, wenn Sie eine einzelne Sitzung abfragen oder prüfen möchten, ob diese Sitzung 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

Das bedeutet GET /sessions?session=<selector>Es ist funktional identisch. Beide Pfade rufen denselben Handler auf. GET /sessions/<sel>은 :<index> Es ist einer der wenigen Endpunkte, die mehrdeutige Wildcard-Muster ohne Suffix zulassen, und GET /sessionsGibt alle Einträge zurück, die dem Format eines Listen-Wrappers entsprechen.

Der Selektor wird unverändert weitergegeben.

#42Wow *Alle oben genannten Selektorformate, einschließlich der Profilmuster, werden von Standard-HTTP-Clients (Python requests, libhv, curl, fetch) wird unverändert übertragen. Eine URL-Kodierung auf Client-Seite ist nicht erforderlich. In der Shell gilt: # oder *Bitte setzen Sie Tokens, die diese Zeichen enthalten, in Anführungszeichen (z. B.: --session "#42", --session "co.haply.hub::*:0"). Auf diese Weise behandelt die Shell dies als Kommentar und führt keine Glob-Erweiterung für lokale Dateien durch.

Eine Ausnahme: ? Das Metazeichen „glob“ ist Pfadist das Trennzeichen in URL-Abfragen. Der Selektor für das Pfadformat (z. B. /sessions/defaul?:0) heißt es %3FEs muss prozentweise kodiert werden — GET /sessions/defaul%3F:0. Abfrageformatselektor (?session=defaul?:0) ist der erste ?indem man die Abfrage aufteilt, und anschließend ? Die Nachricht wird unverändert weitergeleitet.

Für WebSocket-Sitzungen ist kein Selektor erforderlich.

Bei einer WebSocket-Verbindung ist der Benutzer selbst die Sitzung. configure sowie commands Das Element wird automatisch auf das Gerät der aktuellen Sitzung angewendet. Der Sitzungsselektor HTTP Anfragen (einschließlich Fernsteuerung zwischen Sitzungen, Sitzung (Siehe) ist nur dort erforderlich.