Zum Hauptinhalt springen

Wahlschalter

Die Selektoren geben an, auf welches Gerät und welche Sitzung sich eine HTTP-Anfrage oder ein WebSocket-Befehl bezieht.

Geräteauswahl – URL-Pfad​

Wird in allen HTTP-Routen auf Geräteebene in der Form /{device_type}/{id_or_index}/….

BeispielrouteBedeutung des Wahlschalters
inverse3/0Premier Inverse3 , gemäß dem Index (Basis 0)
inverse3/A14Inverse3 Die Gerätekennung lautet A14
inverse3/*Alle Geräte Inverse3 (Platzhalter)
*inverse/*Alle Geräte der Inverse-Familie (Inverse3, Inverse3x, Minverse)
inverse3:left/0Inverse3 , Premierminister, laut IndexLinkshänder
*inverse:right/0Top-Gerät der Inverse-Familie für Rechtshänder gemäß dem Index
verse_grip/0Premier VerseGrip mit Kabel, je nach Index
wireless_verse_grip/*Alle kabellosen VerseGrip-Modelle
*verse_grip/*Alle Geräte der VerseGrip-Familie (kabelgebunden, kabellos, individuell angepasst)
*verse_grip:custom/0Premier VerseGrip individuell angepasst gemäß dem Index (entspricht custom_verse_grip/0)

Klassenfilter werden vor der Indizierung ausgewertet​

Ein Wahlschalter <type>:<class>/<N> Applikation zunächst den Klassenfilter und indiziert anschließend in der gefilterten Menge. Der <N> bezeichnet eine Position in der gefilterten Liste und nicht in der ungesiebten Liste der Geräte:

  • *inverse:left/0 — das Gerät Zeigefinger-Gaucher 0 aus der Inverse-Familie. Sind drei Inverse-Geräte angeschlossen (Rechtshänder, Linkshänder, Rechtshänder), so entspricht dieser Wahlschalter dem zweiten Gerät und nicht dem Index. 0 gefiltert nach „muss Linkshänder sein“.
  • inverse3:right/0 — le Inverse3 rechtshändiger d'Index 0.
  • *inverse:left/3 — 404 wenn weniger als vier linksdrehende Inverse-Geräte angeschlossen sind, auch wenn insgesamt mehr als vier Inverse-Geräte vorhanden sind.

Das Gleiche gilt für generische Selektoren: *inverse/* et *verse_grip/* entsprechend tous die Geräte der Familie und die Anfragen POST / DELETE Ziel Diese Selektoren wenden die Operation auf alle die Entsprechungen, und nicht nur die erste.

Regeln:

  • GET lehne allgemeine (mehrdeutige) Selektoren ab → 400
  • POST et DELETE akzeptieren Platzhalter – die Operation wird auf alle Übereinstimmungen angewendet
  • Die Antworten 404 verwenden die Form no device matches selector '<sel>', wo <sel> ist der ursprüngliche Selektorausdruck, wie er empfangen wurde

Unterstützte Werte für {device_type} : inverse3, verse_grip, wireless_verse_grip, oder die Platzhalter für Familien *inverse, *verse_grip.

Sitzungsauswahl – Abfrageparameter ?session=<expr>​

HTTP-Endpunkte im Sitzungsbereich (basis, mount, preset, filters, navigation, SDF) erfordern einen Anfrageparameter ?session=<expr> um den Kontext der Sitzung zu ermitteln, in dem gearbeitet werden soll.

AusdruckBedeutung
(ausgelassen)Alle Sitzungen (nur zulässig auf DELETE)
#123 ou 123Sitzung mit der numerischen Kennung 123
:0Erste Sitzung gemäß dem Index
:-1Letzte Sitzung gemäß Index
profile_nameErste Sitzung mit diesem Profil (möglicherweise mehrdeutig)
profile_name:0Erste Sitzung mit diesem Profil, Index 0
:default:0Erste Sitzung mit dem Profil default am Index 0
co.haply.hub::*:0Erste Sitzung, deren Profil mit folgenden Zeichen beginnt: co.haply.hub:: (Platzhalter „glob“)
:co.haply.hub::*:-1Letzte Sitzung des Namensraums co.haply.hub::

Beispiel:

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

Platzhalterzeichen in Profilnamen​

Profilmuster akzeptieren zwei globale Metazeichen:

MetazeichenBedeutung
*entspricht einer beliebigen Zeichenfolge (einschließlich einer leeren Zeichenfolge)
?entsprechen genau einem Zeichen

Jedes andere Zeichen – einschließlich :, ., -, [, ] — wird wörtlich verglichen (Zeichenklassen wie [abc] sind pas (übernimmt). Bei der Übereinstimmung wird die Groß-/Kleinschreibung berücksichtigt.

Un * allein (oder all) seine bestehende Bedeutung beibehalten, d. h. alle Sitzungen. Um Profile zu finden, deren Name mit *, fügen Sie mindestens ein weiteres Zeichen hinzu (z. B. *foo).

Nützliche Motive:

  • co.haply.hub::* — jedes Profil des Namensraums co.haply.hub::
  • *-update — jedes Profil, das mit -update
  • co.haply.*:* — jedes Profil, dessen Namensraum mit co.haply.
  • defaul? — jedes Profil mit 7 Zeichen, das mit defaul

Ein allgemeines Motiv ist mehrdeutig allein (es kann sich auf mehrere Sitzungen beziehen). Um es auf einem Endpunkt zu verwenden GET / POST, beseitigen Sie die Mehrdeutigkeit mit einem :<index> Endstand:

# 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 mit folgendem Fehler verworfen: 400 bei GET/POST. Sie werden auf Routen toleriert, die ausdrücklich mehrere Sitzungszuordnungen zulassen — GET /sessions/<sel> (leitet alle Nachrichten weiter) und die Endpunkte DELETE (gilt für alle Korrespondenz).

Sitzungsauswahl – URL-Pfad​

Der Endpunkt /sessions/{selector} akzeptiert die derselbe Ausdruck wie ein Pfadparameter — nützlich, um nach einer bestimmten Sitzung zu suchen 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 denselben Manager auf. GET /sessions/<sel> ist einer der wenigen Endpunkte, die ein mehrdeutiges generisches Muster ohne Suffix zulassen :<index> — il sendet alle Korrespondenz in demselben Serienbriefumschlag zurück wie GET /sessions.

Geben Sie die Auswahlfelder unverändert weiter

Jede der oben genannten Schalterformen – einschließlich #42 und die Profilmuster mit * — wird von Standard-HTTP-Clients unverändert weitergeleitet (Python requests, libhv, curl, fetch). Eine clientseitige URL-Kodierung ist nicht erforderlich. Setzen Sie in der Befehlszeile die Token, die Folgendes enthalten, in Anführungszeichen # ou * (z. B. --session "#42", --session "co.haply.hub::*:0") um zu verhindern, dass der Interpreter sie als Kommentare behandelt oder als generische Muster auf lokale Dateien anwendet.

Eine Ausnahme : das Metazeichen „glob“ ? ist das URL-Abfrage-Trennzeichen in den Wege. In einem Form-Pfad-Selektor (z. B. /sessions/defaul?:0), muss er in Prozent angegeben werden in der Form %3F — GET /sessions/defaul%3F:0. In einem Abfrageform-Selektor (?session=defaul?:0), nur der erste ? trennt die Abfrage und die ? Die folgenden werden unverändert weitergeleitet.

WebSocket-Sitzungen benötigen keine Selektoren

Bei einer WebSocket-Verbindung können Sie seid Die Sitzung: Ihre Einträge configure et commands Sie wählen automatisch die Geräte der aktuellen Sitzung aus. Die Sitzungsauswahlfelder sind nur für Abfragen erforderlich HTTP (einschließlich der Fernbedienung zwischen den Sitzungen – siehe Sitzungen).