Aller directement au corps du texte

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érairesSignification des sélecteurs
inverse3/0Le premier selon l'index (qui commence à 0) Inverse3
inverse3/A14L'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/0Premier gaucher selon l'indice Inverse3
*inverse:right/0Premier appareil de la gamme Inverse pour droitiers, selon l'index
verse_grip/0Premier 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/0Premier 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. Index 0Il 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) → 400
  • POSTWa DELETEautorise les caractères génériques — l'opération s'applique à tous les appareils correspondants
  • 404 La réponse est no 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.

expressionSignification
(omission)Toutes les sessions (DELETE(autorisé uniquement à cet endroit)
#123 ou bien 123Session dont l'identifiant numérique est 123
:0Première session selon l'index
:-1Dernière séance selon l'indice
profile_namePremière session avec ce profil (peut prêter à confusion)
profile_name:0Parmi les sessions associées à ce profil, la session d'index 0
:default:0Profil defaultla session n° 0 parmi les sessions ayant […]
co.haply.hub::*:0Le profil co.haply.hub::Première session commençant par (caractère générique « glob »)
:co.haply.hub::*:-1co.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èresSignification
*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 par
  • co.haply.*:* — L'espace de noms est co.haply.Tous les profils commençant par
  • defaul? — 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.

Le sélecteur transmet les données telles quelles

#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.

Les sessions WebSocket ne nécessitent pas de sélecteur.

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.