Sélecteur
Le sélecteur permet d'identifier à quel appareil et à quelle sessions'adresse une requête HTTP ou une commande WebSocket.
Sélecteur de périphérique — Chemin d'accès URL
Dans tous les chemins HTTP au niveau des périphériques, /{device_type}/{id_or_index}/… Il est utilisé comme format.
| Exemples d'itinéraires | Signification des sélecteurs |
|---|---|
inverse3/0 | Le premier selon l'index (qui commence à 0) Inverse3 |
inverse3/A14 | L'identifiant de l'appareil est A14in Inverse3 |
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 gaucher selon l'indice Inverse3 |
*inverse:right/0 | Premier appareil de la gamme Inverse pour droitiers, selon l'index |
verse_grip/0 | Premier modèle filaire de la gamme VerseGrip |
wireless_verse_grip/* | Tous les VerseGrip sans fil |
*verse_grip/* | Tous les appareils de la gamme VerseGrip (filaire, sans fil, sur mesure) |
*verse_grip:custom/0 | Premier VerseGrip personnalisé selon l'index (custom_verse_grip/0(identique à) |
Les filtres de classe sont appliqués avant l'indexation.
<type>:<class>/<N> Le sélecteur commence par Filtre de classesAprès avoir appliqué cette opération, on procède à l'indexation de l'ensemble filtré. <N>indique la position dans la liste filtrée et non dans la liste d'origine :
*inverse:left/0— Appareil de la série Inverse pour gauchers, numéro 0 Il s'agit d'un dispositif. Si trois dispositifs « Inverse » sont connectés (dans l'ordre : main droite, main gauche, main droite), ce sélecteur est interprété comme correspondant au deuxième dispositif. Index0Il ne s'agit pas de choisir d'abord un appareil, puis de filtrer les résultats en sélectionnant « doit être pour gaucher ».inverse3:right/0— Appareil n° 0 parmi les appareils « droitier » Inverse3 .*inverse:left/3— Si moins de quatre appareils de la gamme Inverse pour gauchers sont connectés, même si le nombre total d'appareils Inverse dépasse quatre,404renvoie.
La même règle s'applique aux sélecteurs génériques. *inverse/*Wa *verse_grip/*est celui de cette gamme Tous les qui correspondent à l'appareil et qui ciblent ces sélecteurs POST et DELETE La requête ne concerne pas uniquement le premier appareil, mais Tous ceux qui correspondent Applique les modifications à l'appareil.
Règles :
GETRejette le sélecteur générique (car il est ambigu) →400POSTWaDELETEautorise les caractères génériques — l'opération s'applique à tous les appareils correspondants404La réponse estno device matches selector '<sel>'On utilise le format. Ici,<sel>Il s'agit de l'expression de sélecteur d'origine reçue.
Prise en charge de {device_type} Valeur : inverse3, verse_grip, wireless_verse_grip, ou un caractère générique de série *inverse, *verse_grip.
Sélecteur de session — ?session=<expr> Paramètres de requête
Les points de terminaison HTTP de portée de session (basis, mount, preset, filters, navigation, SDF) permettent d'identifier le contexte de session dans lequel ils doivent fonctionner, ?session=<expr> Un paramètre de requête est requis.
| expression | Signification |
|---|---|
| (omission) | Toutes les sessions (DELETE(autorisé uniquement à cet endroit) |
#123 ou bien 123 | Session dont l'identifiant numérique est 123 |
:0 | Première session selon l'index |
:-1 | Dernière séance selon l'indice |
profile_name | Première session avec ce profil (peut prêter à confusion) |
profile_name:0 | Parmi les sessions associées à ce profil, la session d'index 0 |
:default:0 | Profil defaultla session n° 0 parmi les sessions ayant […] |
co.haply.hub::*:0 | Le profil co.haply.hub::Première session commençant par (caractère générique « glob ») |
:co.haply.hub::*:-1 | co.haply.hub:: Dernière session sur les espaces de noms |
Exemple :
GET /inverse3/0/config/navigation?session=:default:0
Caractères génériques pour le nom de profil
Les modèles de profil acceptent deux métacaractères « glob » :
| métacaractères | Signification |
|---|---|
* | Correspond à une séquence de caractères quelconque (y compris une chaîne vide) |
? | Correspond exactement à un caractère |
Tous les autres caractères (:, ., -, [, ] (inclus) correspond littéralement à ([abc]Les classes de caractères telles que Non pris en charge). La correspondance tient compte de la distinction entre majuscules et minuscules.
Exclusif *(ou all) reste, comme auparavant, Toutes les sessionssignifie. Le nom *Pour faire correspondre un profil commençant par cette chaîne, veuillez inclure au moins un autre caractère (par exemple : *foo).
Modèles utiles :
co.haply.hub::*—co.haply.hub::Tous les profils appartenant à l'espace de noms*-update—-updateTous les profils se terminant parco.haply.*:*— L'espace de noms estco.haply.Tous les profils commençant pardefaul?—defaulTous les profils de 7 caractères commençant par
Les motifs avec caractères génériques, pris isolément, C'est ambigu.(Cela peut correspondre à plusieurs sessions). GET / POST Pour l'utiliser sur un terminal, ajoutez à la fin :<index>en ajoutant « » pour préciser clairement l'objet :
# 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 dans les requêtes GET/POST 400est rejeté. Il est toutefois autorisé dans les chemins qui autorisent explicitement la correspondance avec plusieurs sessions, ce qui GET /sessions/<sel>(renvoie tous les éléments correspondants) et DELETE Il s'agit d'un point de terminaison (qui s'applique à toutes les cibles correspondantes).
Sélecteur de session — Chemin d'accès URL
/sessions/{selector} Un point de terminaison est Expression identique au paramètre de cheminpermet de consulter une session spécifique ou de vérifier si celle-ci 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 signifie que GET /sessions?session=<selector>et est fonctionnellement identique. Les deux chemins appellent le même gestionnaire. GET /sessions/<sel>은 :<index> C'est l'un des rares points de terminaison à autoriser des modèles génériques ambigus sans suffixe, et GET /sessionsRenvoie tous les éléments correspondant au format de liste « wrapper » tel que celui-ci.
#42Wa *Tous les formats de sélecteurs ci-dessus, y compris les modèles de profil, sont pris en charge par un client HTTP standard (Python requests, libhv, curl, fetch) est transmise telle quelle. Aucun encodage d'URL côté client n'est nécessaire. Dans le shell, # ou bien *Veuillez mettre entre guillemets les jetons qui contiennent ces caractères (par exemple : --session "#42", --session "co.haply.hub::*:0"). De cette manière, le shell ne considérera pas cette ligne comme un commentaire et n'appliquera pas l'extension « glob » aux fichiers locaux.
Une exception: ? Le métacaractère « glob » est Chemin d'accèsIl s'agit du séparateur dans les requêtes URL. Sélecteur de format de chemin (par exemple : /sessions/defaul?:0) dans %3FIl faut utiliser le codage en pourcentage — GET /sessions/defaul%3F:0. Sélecteur de type de requête (?session=defaul?:0) : le premier ?En divisant la requête en plusieurs parties, puis ? Les messages sont transmis tels quels, sans aucune modification.
Dans une connexion WebSocket, l'utilisateur lui-même constitue la session. configure et commands Les éléments ciblent automatiquement les appareils de la session en cours. Le sélecteur de session est HTTP Requêtes (y compris le contrôle à distance entre sessions, session (Référence) uniquement.