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 Routen | Die Bedeutung von „Selektor“ |
|---|---|
inverse3/0 | Das erste „Inverse3“, das durch den Index (ab 0) angegeben wurde |
inverse3/A14 | Geräte-ID A14 Inverse3 |
inverse3/* | Alle Inverse3-Geräte (Platzhalter) |
*inverse/* | Alle Geräte der Inverse-Familie (Inverse3, Inverse3x,Minverse) |
inverse3:left/0 | Das erstelinksausgerichtete„Inverse3“, das durch den Index (ab 0) angegeben wird |
*inverse:right/0 | Das erste Gerät der „Inverse“-Familiemit rechtsseitiger Ausrichtung, das durch den Index (ab 0) angegeben wird |
verse_grip/0 | Der 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/0 | Der 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. Index0Dies 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.404gibt 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:
GETlehnt den Wildcard-Selektor (aufgrund seiner Mehrdeutigkeit) ab →400POSTundDELETEAkzeptiert Platzhalter. Die Operation gilt für alle Übereinstimmungen.404Die Antwort lautetno 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.
| Formel | Bedeutung |
|---|---|
| (Auslassung) | Alle Sitzungen (DELETE (nur dort zulässig) |
#123 oder 123 | Sitzung mit der Nummer 123 |
:0 | Die erste Sitzung anhand der Indexangabe |
:-1 | Die letzte Sitzung anhand der Indexangabe |
profile_name | Die erste Sitzung mit diesem Profil (kann zu Unklarheiten führen) |
profile_name:0 | Nach Angabe des Profils die Sitzung mit dem Index 0 |
:default:0 | Profil default Von den Sitzungen, die diesen Wert haben, die erste Sitzung mit dem Index 0 |
co.haply.hub::*:0 | Der Profilname lautet co.haply.hub:: Die erste Sitzung, die mit … beginnt (Grob-Wildcard) |
:co.haply.hub::*:-1 | co.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:
| Metazeichen | Bedeutung |
|---|---|
* | 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—-updatebeliebige Profile, die mit … endenco.haply.*:*— Der Namensraum istco.haply.beliebige Profile, die mit „de“ beginnendefaul?—defaulEin 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.
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.
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).