주요 내용으로 이동

선택기

선택기는 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 와일드카드 선택자를 거부합니다(의미가 불명확함) → 400
  • POST 와 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 또는 123ID가 123인 세션
:0인덱스를 기준으로 첫 번째 세션을 가져오기
:-1인덱스를 기준으로 마지막 세션을 가져오기
profile_name이 프로필을 사용하는 첫 번째 세션 (중복될 수 있음)
profile_name:0지정된 프로필 중 인덱스가 0인 첫 번째 세션
:default:0프로필은 default 또한 인덱스가 0인 첫 번째 세션
co.haply.hub::*:0프로필: co.haply.hub:: 시작 부분(glob 와일드카드)의 첫 번째 세션
:co.haply.hub::*:-1co.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 세션에는 선택자가 필요하지 않습니다

WebSocket 연결에서, 당신은바로대화 그 자체——당신의 configure 와 commands 항목은 현재 세션의 기기로 자동으로 연결됩니다. 오직 HTTP 요청 시에만 세션 선택기가 필요합니다(세션 간 원격 제어 포함, 참조: 대화).