선택기
선택기는 HTTP 요청이나 WebSocket 명령의대상 장치및 세션을식별하는 데 사용됩니다.
장비 선택기 — URL 경로
모든 장치 수준의 HTTP 라우팅에 사용되며, 형식은 다음과 같습니다. /{device_type}/{id_or_index}/…。
| 라우팅 예시 | 선택자의 의미 |
|---|---|
inverse3/0 | 인덱스를 기준으로 첫 번째 요소 가져오기 Inverse3(0부터 시작) |
inverse3/A14 | 장치 ID는 A14 의 Inverse3 |
inverse3/* | 모든 Inverse3 장치(와일드카드) |
*inverse/* | 모든 Inverse 시리즈 기기(Inverse3, Inverse3x,Minverse) |
inverse3:left/0 | 색인 순서대로 첫 번째왼쪽을 선택한다Inverse3 |
*inverse:right/0 | 색인 순서대로 첫 번째‘오른손 Inverse’ 시리즈 기기를 선택 |
verse_grip/0 | 색인 순서대로 첫 번째 유선 VerseGrip을 선택 |
wireless_verse_grip/* | 모든 무선 VerseGrip |
*verse_grip/* | 모든 VerseGrip 시리즈 기기(유선, 무선, 맞춤형) |
*verse_grip:custom/0 | 인덱스를 기준으로 첫 번째 사용자 정의 VerseGrip을 가져옵니다(다음과 동일합니다: custom_verse_grip/0) |
클래스 필터는 인덱스보다 먼저 해석됩니다.
<type>:<class>/<N> 선택기는먼저필터링 작업을 수행한 다음, 필터링된 집합에 대해 인덱스를 생성합니다.<N> 이는 원본 장치 목록 내의 위치가 아니라, 필터링된 목록 내의 위치를 의미합니다:
*inverse:left/0— 0번째 왼손 Inverse 시리즈 장치. Inverse 장치 세 대(오른쪽, 왼쪽, 오른쪽)가 연결된 경우, 원본 목록의 인덱스를 그대로 사용하는 것이 아니라 두 번째 장치로 해석됩니다.0필터 조건을 “반드시 왼손이어야 함”으로 다시 설정합니다.inverse3:right/0— 0번째 오른손 Inverse3。*inverse:left/3— 연결된 왼쪽 Inverse 장치가 4개 미만인 경우, 다음을 반환합니다.404, 시스템 내 Inverse 장치의 총 수가 4개를 초과하더라도.
와일드카드 선택자도 이 규칙을 따릅니다:*inverse/* 와 *verse_grip/* 해당 시리즈에 포함된 항목과 일치합니다.각각의장비, 이러한 선택기에 대해 POST / DELETE 이 요청은 해당 작업을 다음 대상에 적용합니다.각각의일치하는 항목들, 단순히 첫 번째 항목뿐만 아니라.
규칙:
GET와일드카드 선택자를 거부합니다(의미가 불명확함) →400POST와DELETE와일드카드 허용 — 해당 작업은 일치하는 모든 항목에 적용됩니다.404사용에 대한 응답no device matches selector '<sel>'의 형식이며, 그중<sel>수신된 원본 선택기 표현식에 대해
지원되는 {device_type} 값: inverse3、verse_grip、wireless_verse_grip,
또는 범위 와일드카드 *inverse、*verse_grip。
대화 선택기 — ?session=<expr> 쿼리 매개변수
세션 수준 HTTP 엔드포인트(basis, mount, preset, filters, navigation, SDF)에는 다음이 필요합니다. ?session=<expr> 쿼리 매개변수를 사용하여 해당 작업이 수행될 세션 컨텍스트를 지정합니다.
| 식 | 의미 |
|---|---|
| (생략) | 모든 세션(다음 용도로만 허용됨) DELETE) |
#123 또는 123 | ID가 123인 세션 |
:0 | 인덱스를 기준으로 첫 번째 세션을 가져오기 |
:-1 | 인덱스를 기준으로 마지막 세션을 가져오기 |
profile_name | 이 프로필을 사용하는 첫 번째 세션 (중복될 수 있음) |
profile_name:0 | 지정된 프로필 중 인덱스가 0인 첫 번째 세션 |
:default:0 | 프로필은 default 또한 인덱스가 0인 첫 번째 세션 |
co.haply.hub::*:0 | 프로필: co.haply.hub:: 시작 부분(glob 와일드카드)의 첫 번째 세션 |
:co.haply.hub::*:-1 | co.haply.hub:: 네임스페이스 내의 마지막 세션 |
예시:
GET /inverse3/0/config/navigation?session=:default:0
프로필 이름 와일드카드
profile 모드는 두 가지 glob 메타문자를 지원합니다:
| 메타문자 | 의미 |
|---|---|
* | 임의의 문자열(빈 문자열 포함)과 일치 |
? | 한 글자와 정확히 일치함 |
그 외의 모든 문자——다음이 포함되며 :、.、-、[、]——모두 문자 그대로 일치합니다(아니다음과 같은 문자 클래스를 지원합니다. [abc]). 대소문자를 구분하여 일치시킵니다.
별도의 *(또는 all) 원래의 의미를 그대로 유지하며, 즉모든 대화。이름을 일치시키려면 * 프로필의 시작 부분에는 다른 문자를 적어도 하나 포함해야 합니다(예: *foo).
자주 사용하는 모드:
co.haply.hub::*—co.haply.hub::네임스페이스 내의 임의의 프로필*-update— 임의로-update마지막에 나오는 프로필co.haply.*:*— 네임스페이스는co.haply.시작 부분에 있는 임의의 프로필defaul?— 임의로defaul시작 부분, 총 7자 분량의 프로필
와일드카드 패턴 자체모호함이 존재함(여러 세션과 일치할 수 있음). 만약 GET / POST 엔드포인트에서 사용하려면 끝에 다음을 추가하십시오. :<index> 오해를 방지하기 위해:
# 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
인덱스가 없는 모호한 와일드카드는 GET/POST에서 400 거부. 다중 세션 매칭을 명시적으로 허용하는 라우팅에서는 사용이 허용됩니다——GET /sessions/<sel>(모든 일치 항목으로 돌아가기) 및 DELETE 종점 (모든 일치 항목에 적용됨).
세션 선택기 — URL 경로
/sessions/{selector} 엔드포인트 수신 및경로 매개변수가 동일한 표현식——개별 세션을 조회하거나 해당 세션이 존재하는지 확인하는 데 사용됩니다:
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
이는 기능상 다음과 동일합니다. GET /sessions?session=<selector>; 두 경로는 동일한 처리 함수를 호출합니다.GET /sessions/<sel> 생략을 허용하는 몇 안 되는 경우 중 하나이다 :<index> 접미사, 모호성을 허용하는 와일드카드 패턴을 지원하는 엔드포인트 중 하나——이는 다음과 같이 GET /sessions 동일한 목록 구조를 사용하여 모든 일치 항목을 반환합니다.
앞서 언급한 모든 선택자 형식——다음과 같은 것을 포함하여 #42 그리고 ~와 함께 * 프로필 모드——모두 표준 HTTP 클라이언트(Python)에 의해 requests、libhv、curl、fetch)원본 그대로 전송합니다. 클라이언트 측에서 URL 인코딩을 할 필요가 없습니다. 셸에서는 다음을 포함하는 # 또는 * 매개변수를 따옴표로 묶으십시오(예: --session "#42"、--session "co.haply.hub::*:0"), 셸이 이를 주석으로 인식하거나 로컬 파일에 대한 글로브 확장을 수행하지 못하도록 하기 위함입니다.
한 가지 예외:에서경로그중,? 'glob' 메타문자는 URL 쿼리 구분자입니다. 경로 형식의 선택자에서 (예: /sessions/defaul?:0), 이는 다음과 같이 인코딩되어야 합니다. %3F, 즉 GET /sessions/defaul%3F:0。쿼리 형식의 선택자(?session=defaul?:0) 중에서 첫 번째 것만 ? 쿼리 부분을 구분하고, 그 뒤의 ? 문자는 있는 그대로 전달됩니다.
WebSocket 연결에서, 당신은바로대화 그 자체——당신의 configure 와 commands 항목은 현재 세션의 기기로 자동으로 연결됩니다. 오직 HTTP 요청 시에만 세션 선택기가 필요합니다(세션 간 원격 제어 포함, 참조: 대화).