Sélecteurs
Les sélecteurs déterminent à quel appareil et à quelle session une requête HTTP ou une commande WebSocket est destinée.
Sélecteur d'appareils — Chemin d'accès URL
Est utilisé dans toutes les routes HTTP liées à un appareil sous la forme /{device_type}/{id_or_index}/… utilisé.
| Exemple d'itinéraire | Signification du sélecteur |
|---|---|
inverse3/0 | Premier « Inverse3 » par index (à partir de 0) |
inverse3/A14 | Inverse3 avec l'identifiant de l'appareil A14 |
inverse3/* | Tous les appareils « Inverse3 » (caractère générique) |
*inverse/* | Tous les appareils de la gamme Inverse (Inverse3, Inverse3x, Minverse) |
inverse3:left/0 | Premier « Inverse3 » gaucher selon Index |
*inverse:right/0 | Premier appareil pour droitiers de la gamme Inverse selon Index |
verse_grip/0 | Premier VerseGrip filaire selon Index |
wireless_verse_grip/* | Tous les VerseGrips sans fil |
*verse_grip/* | Tous les appareils de la gamme VerseGrip (avec fil, sans fil, sur mesure) |
*verse_grip:custom/0 | Premier VerseGrip personnalisé selon l'index (correspond à custom_verse_grip/0) |
Les filtres de classe sont résolus avant l'indexation
Ein <type>:<class>/<N>- Selektor applique d'abord le filtre de classe un puis indexe l'ensemble filtré. <N> fait référence à une entrée de la liste filtrée, et non de la liste brute des appareils :
*inverse:left/0— das nullte gaucher Appareil de la gamme Inverse. Si trois appareils Inverse sont connectés (à droite, à gauche, à droite), la configuration est résolue comme s'il s'agissait d'un deuxième appareil – et non comme un index.0, filtré selon le critère « doit être à gauche ».inverse3:right/0— le « zéro » droitier Inverse3.*inverse:left/3—404, lorsque moins de quatre appareils Inverse pour gauchers sont connectés, même si le nombre total d'appareils Inverse est supérieur à quatre.
La même règle s'applique aux sélecteurs génériques : *inverse/* et *verse_grip/* se rencontrer chaque Appareil de la famille, et POST- ou bien DELETE-Les requêtes ciblant ces sélecteurs appliquent l'opération à chaque Des résultats – et pas seulement au premier coup.
Règles :
GETrefuse les sélecteurs génériques (ambigus) →400POSTetDELETEacceptent les caractères génériques – l'opération s'applique à tous les résultats correspondants404- Les réponses prennent la forme suivante :no device matches selector '<sel>', à savoir que<sel>L'expression de sélection d'origine, telle qu'elle a été reçue, est la suivante :
Prise en charge {device_type}-Valeurs : inverse3, verse_grip, wireless_verse_grip ou des caractères génériques de famille *inverse, *verse_grip.
Sélecteur de session — ?session=<expr>-Paramètres de requête
Les points de terminaison HTTP liés à la session (basis, mount, preset, filters, navigation, SDF) nécessitent un paramètre de requête ?session=<expr>, qui définit le contexte de session dans lequel elles fonctionnent.
| Impression | Signification |
|---|---|
| (omission) | Toutes les séances (uniquement pour DELETE autorisé) |
#123 ou 123 | Séance portant le numéro d'identification 123 |
:0 | Première séance selon l'indice |
:-1 | Dernière séance selon l'indice |
profile_name | Première session avec ce profil (peut prêter à confusion) |
profile_name:0 | Première session avec ce profil et l'index 0 |
:default:0 | Première séance avec profil default un indice 0 |
co.haply.hub::*:0 | Première séance dont le profil correspond à co.haply.hub:: commence par (caractère générique « * ») |
:co.haply.hub::*:-1 | Dernière session dans l'espace de noms co.haply.hub:: |
Exemple :
GET /inverse3/0/config/navigation?session=:default:0
Caractères génériques pour les noms de profil
Les modèles de profil acceptent deux méta-caractères Glob :
| Méta-caractères | Signification |
|---|---|
* | représente une chaîne de caractères quelconque (même vide) |
? | correspond à exactement un caractère |
Tous les autres caractères – y compris :, ., -, [, ] – sont comparés littéralement (classes de caractères telles que [abc] werden nicht (pris en charge). La comparaison est sensible à la casse.
Une maison individuelle * (ou all) conserve sa signification actuelle de toutes les séances. Pour faire correspondre un profil dont le nom commence par * commence, veuillez saisir au moins un caractère supplémentaire (par exemple : *foo).
Modèles utiles :
co.haply.hub::*— chaque profil dans l'espace de nomsco.haply.hub::*-update— chaque profil dont le nom commence par-updatefinitco.haply.*:*— tout profil dont l'espace de noms commence parco.haply.commencedefaul?— chaque profil de 7 caractères commençant pardefaulcommence
Un motif avec caractères génériques est, en soi, ambigu (cela peut concerner plusieurs séances). Pour l'expliquer en un GET- ou POST- Pour utiliser « Endpunkt », résolvez l'ambiguïté en ajoutant un :<index> sur :
# 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
Les caractères génériques ambigus (sans index) sont traités lors des requêtes GET/POST avec 400 refusées. Elles ne sont tolérées que sur les routes qui acceptent expressément les correspondances entre plusieurs sessions – GET /sessions/<sel> (renvoie chaque résultat) et DELETE- Critères d'évaluation (appliqués à chaque résultat).
Sélecteur de session — Chemin d'accès URL
Le point final /sessions/{selector} accepté la même expression qu'un paramètre de chemin – utile pour récupérer une session spécifique ou vérifier qu'elle existe :
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
Cela revient, d'un point de vue fonctionnel, à GET /sessions?session=<selector>; ces deux routes appellent le même gestionnaire. GET /sessions/<sel> est l'un des rares points de terminaison à accepter un motif générique ambigu sans :<index>- Tolérer les suffixes : il renvoie tous les résultats dans la même structure de liste que GET /sessions.
Chaque forme de sélecteur mentionnée ci-dessus – y compris #42 et des motifs de profil avec * – est pris en charge par les clients HTTP standard (Python requests, libhv, curl, fetch) sont transférées telles quelles. Aucun encodage d'URL côté client n'est nécessaire. Dans les shells, vous devez éviter les expressions qui # ou * à mettre entre guillemets (par exemple : --session "#42", --session "co.haply.hub::*:0"), afin que le shell ne les interprète pas comme des commentaires ou ne les développe pas en expressions globales pour des fichiers locaux.
Une exception: Le méta-symbole Glob ? se trouve dans Sentiers le séparateur de la requête URL. Dans un sélecteur sous forme de chemin (par exemple, /sessions/defaul?:0) il faut le considérer comme %3F être codé en pourcentage – GET /sessions/defaul%3F:0. Dans un sélecteur sous forme de requête (?session=defaul?:0) n'affiche que le premier ? la requête, puis les suivantes ?- Les caractères sont repris tels quels.
Dans le cas d'une connexion WebSocket sont La session – Vos entrées configure et commands visent automatiquement les appareils de la session en cours. Les sélecteurs de session ne sont utilisés que pour HTTP- Demandes requises (y compris le contrôle à distance entre les sessions – voir Séances).