Zum Hauptinhalt springen

Selektor

Der Selektor legt fest,welche Geräteundwelche Sitzungenals Ziel einer HTTP-Anfrage oder eines WebSocket-Befehls ausgewählt werden.

Geräteauswahl – URL-Pfad​

Bei allen HTTP-Routen auf Geräteebene,/{device_type}/{id_or_index}/… wird in dieser Form verwendet.

Beispiele für RoutenDie Bedeutung von „Selektor“
inverse3/0Das erste „Inverse3“, das durch den Index (ab 0) angegeben wurde
inverse3/A14Geräte-ID A14 Inverse3
inverse3/*Alle Inverse3-Geräte (Platzhalter)
*inverse/*Alle Geräte der Inverse-Familie (Inverse3, Inverse3x,Minverse)
inverse3:left/0Das erstelinksausgerichtete„Inverse3“, das durch den Index (ab 0) angegeben wird
*inverse:right/0Das erste Gerät der „Inverse“-Familiemit rechtsseitiger Ausrichtung, das durch den Index (ab 0) angegeben wird
verse_grip/0Der erste kabelgebundene VerseGrip, der durch den Index (ab 0) angegeben wird
wireless_verse_grip/*Alle kabellosen VerseGrip-Modelle
*verse_grip/*Alle Geräte der VerseGrip-Familie (kabelgebunden, kabellos, kundenspezifisch)
*verse_grip:custom/0Der erste benutzerdefinierte VerseGrip, der durch den Index (ab 0) angegeben wurde (custom_verse_grip/0 (wie)

Klassenfilter vor der Indizierung auflösen​

<type>:<class>/<N> Der Formatselektor beginnt zunächst mitKlassenfilterwird angewendet, und anschließend wird die gefilterte Menge indiziert.<N> bezieht sich nicht auf die Liste der Rohgeräte, sondern auf die Position in der gefilterten Liste:

  • *inverse:left/0 — Der 0. LinkshänderEs handelt sich um ein Gerät der Inverse-Familie. Wenn drei Inverse-Geräte angeschlossen sind (in der Reihenfolge rechts, links, rechts), wird dies als zweites Gerät erkannt. Index 0 Dies bezieht sich nicht auf das Ergebnis, das durch den Filter „muss links sein“ ermittelt wurde.
  • inverse3:right/0 — Der 0. RechtshänderDas ist Inverse3.
  • *inverse:left/3 — Wenn weniger als vier angeschlossene Inverse für Linkshänder vorhanden sind, gilt dies auch dann, wenn insgesamt mehr als vier Inverse vorhanden sind. 404 gibt zurück.

Die gleiche Regel gilt auch für den Wildcard-Selektor.*inverse/* und *verse_grip/* ist innerhalb der FamilieAlleStimmt mit dem Gerät überein und zielt auf diese Selektoren ab POST sowie DELETE Die Anforderung wendet die Aktion nicht nur auf das erste Gerät an, sondern auf alle übereinstimmenden Geräte.

Regeln:

  • GET lehnt den Wildcard-Selektor (aufgrund seiner Mehrdeutigkeit) ab → 400
  • POST und DELETE Akzeptiert Platzhalter. Die Operation gilt für alle Übereinstimmungen.
  • 404 Die Antwort lautet no device matches selector '<sel>' Es wird das Format verwendet.<sel> Dies ist der ursprüngliche Selektorausdruck, der empfangen wurde.

entsprechend {device_type} Wert: inverse3、verse_grip、wireless_verse_gripoder eine Familien-Platzhalterzeichen *inverse、*verse_grip。

Sitzungsauswahl — ?session=<expr> Abfrageparameter​

Bei den HTTP-Endpunkten im Sitzungsbereich (basis, mount, preset, filters, navigation, SDF) wird zur Identifizierung des Kontexts der betreffenden Sitzung ?session=<expr> Es sind Abfrageparameter erforderlich.

FormelBedeutung
(Auslassung)Alle Sitzungen (DELETE (nur dort zulässig)
#123 oder 123Sitzung mit der Nummer 123
:0Die erste Sitzung anhand der Indexangabe
:-1Die letzte Sitzung anhand der Indexangabe
profile_nameDie erste Sitzung mit diesem Profil (kann zu Unklarheiten führen)
profile_name:0Nach Angabe des Profils die Sitzung mit dem Index 0
:default:0Profil default Von den Sitzungen, die diesen Wert haben, die erste Sitzung mit dem Index 0
co.haply.hub::*:0Der Profilname lautet co.haply.hub:: Die erste Sitzung, die mit … beginnt (Grob-Wildcard)
:co.haply.hub::*:-1co.haply.hub:: Die letzte Sitzung im Namensraum

Beispiel:

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

Platzhalter für Profilnamen​

In Profilmustern können zwei Arten von Platzhalterzeichen für Grob-Elemente verwendet werden:

MetazeichenBedeutung
*Stimmt mit einer Zeichenkette beliebiger Länge überein, die eine leere Zeichenkette enthält
?Stimmt genau mit einem Buchstaben überein

Alle Zeichen außer den oben genannten (:、.、-、[、] (einschließlich) stimmen als Literal überein ([abc] Eine Zeichenklasse wieWird nicht unterstützt). Es wird zwischen Groß- und Kleinschreibung unterschieden.

einzelne *(oder all) bleibt wie bisherAlle Sitzungenbedeutet. Der Name lautet * Um mit einem Profil übereinzustimmen, das mit „“ beginnt, muss es mindestens ein weiteres Zeichen enthalten (Beispiel: *foo).

Häufig verwendete Muster:

  • co.haply.hub::* — co.haply.hub:: Beliebige Profile innerhalb des Namensraums
  • *-update — -update beliebige Profile, die mit … enden
  • co.haply.*:* — Der Namensraum ist co.haply. beliebige Profile, die mit „de“ beginnen
  • defaul? — defaul Ein beliebiges Profil mit 7 Zeichen, das mit „“ beginnt

Wildcard-Muster allein sindZweideutig(Es kann sein, dass mehrere Sitzungen übereinstimmen.)GET / POST Zur Verwendung am Endpunkt muss am Ende :<index> Bitte fügen Sie Folgendes hinzu, um Unklarheiten zu beseitigen:

# 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

Unbestimmte Platzhalter (ohne Index) werden bei GET/POST 400 werden abgelehnt. Diese sind in Routen zulässig, die Übereinstimmungen mit mehreren Sitzungen ausdrücklich zulassen. Konkret sind dies:GET /sessions/<sel>(alle Übereinstimmungen zurückgeben) undDELETE Endpunkt (gilt für alle Übereinstimmungen).

Sitzungsauswahl — URL-Pfad​

/sessions/{selector} Endpunkte sind,Derselbe Ausdruck wie bei den Pass-Parameternwird akzeptiert. Dies ist nützlich, um eine einzelne Sitzung zu suchen oder zu überprüfen, ob diese Sitzung vorhanden ist:

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

Funktional gesehen ist dies GET /sessions?session=<selector> ist gleichbedeutend damit. Beide Routen rufen denselben Handler auf.GET /sessions/<sel> ist,:<index> Es ist einer der wenigen Endpunkte, die mehrdeutige Platzhaltermuster ohne das Suffix „の“ zulassen.GET /sessions Mit derselben Listenstruktur als Wrapper werden alle Übereinstimmungen zurückgegeben.

Der Selektor wird unverändert übergeben

Alle oben genannten Selektorformate (#42 や * (einschließlich Profilmustern) werden von einem Standard-HTTP-Client (Python requests、libhv、curl、fetch) wird unverändert gesendet. Eine URL-Kodierung auf der Client-Seite ist nicht erforderlich. In der Shell gilt:# や * Bitte setzen Sie Token, die … enthalten, in Anführungszeichen (Beispiel: --session "#42"、--session "co.haply.hub::*:0"). Andernfalls behandelt die Shell diese als Kommentare oder führt bei lokalen Dateien eine Glob-Erweiterung durch.

Es gibt eine Ausnahme: ? Die Metazeichen von „Grob“ sind:Passist das Trennzeichen für URL-Abfragen. Selektoren im Pfadformat (Beispiel: /sessions/defaul?:0)では,%3F muss als Prozent-Kodierung dargestellt werden (Beispiel: GET /sessions/defaul%3F:0). Selektoren im Abfrageformat (?session=defaul?:0) ist der erste ? nur diese teilen die Abfrage auf, und die folgenden ? Der Text wird unverändert weitergegeben.

Für WebSocket-Sitzungen ist kein Selektor erforderlich.

Bei einer WebSocket-Verbindung ist die Verbindung selbstSitzungwird.configure und commands Einträge beziehen sich automatisch auf das Gerät der aktuellen Sitzung. Ein Sitzungsselektor ist erforderlich, wennHTTP Nur auf Anfrage (einschließlich Remote-Bedienung über mehrere Sitzungen hinweg. Weitere Informationen finden Sie unter Sitzung (siehe dort).