주요 콘텐츠로 건너뛰기
버전: 3.5.x

선택기

선택기는 HTTP 요청이나 WebSocket 명령이 어떤 장치와 어떤 세션을 대상으로 하는지 식별합니다.

장치 선택기 — URL 경로

모든 장치 수준 HTTP 경로에서 다음과 같이 사용됩니다. /{device_type}/{id_or_index}/….

경로 예시선택기의 의미
inverse3/0인덱스(0부터 시작) Inverse3 첫 번째 Inverse3
inverse3/A14장치 ID가 Inverse3 A14
inverse3/*모든 Inverse3 (일괄 지정)
*inverse/*모든 Inverse 시리즈 기기(Inverse3, Inverse3x, Minverse)
verse_grip/0인덱스사의 첫 유선 VerseGrip
wireless_verse_grip/*모든 무선 VerseGrips
*verse_grip/*모든 VerseGrip 제품군 기기(유선, 무선, 맞춤형)

규칙:

  • GET 와일드카드 선택자(모호함)를 허용하지 않음 → 400
  • POST 그리고 DELETE 와일드카드 허용 — 일치하는 모든 항목에 적용되는 작업

지원됨 {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:: (전체 일치 와일드카드)
:co.haply.hub::*:-1지난 세션에서 co.haply.hub:: 네임스페이스

예시:

GET /inverse3/0/config/navigation?session=:default:0

프로필 이름 와일드카드

프로필 패턴은 두 가지 글로브 메타문자를 허용합니다:

메타문자
*어떤 문자열이든(빈 문자열 포함) 일치합니다
?정확히 하나의 문자와 일치합니다

그 외의 모든 등장인물 — 다음을 포함하여 :, ., -, [, ] — 는 문자 그대로 일치합니다( 와 같은 문자 클래스 [abc]아니 (지원됨). 대소문자를 구분합니다.

* (또는 all)는 기존의 의미를 그대로 유지하며 모든 세션. 이름이 로 시작하는 프로필을 일치시키려면 *, 다른 문자를 하나 이상 포함해야 합니다(예: *foo).

유용한 패턴:

  • co.haply.hub::* — 해당 목록에 있는 모든 프로필 co.haply.hub:: 네임스페이스
  • *-update — 다음으로 끝나는 모든 프로필 -update
  • co.haply.*:* — 네임스페이스가 다음으로 시작하는 모든 프로필 co.haply.
  • defaul? — 다음으로 시작하는 7자 프로필 defaul

와일드카드 패턴은 모호한 그 자체로 (하나 이상의 세션과 일치할 수 있음). 이를 사용하려면 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

모호한 와일드카드(인덱스 없음)는 다음 메시지와 함께 거부됩니다. 400 GET/POST 요청에서. 이들은 다중 세션 일치를 명시적으로 허용하는 경로에서는 허용됩니다 — 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> 접미사 — it 일치하는 모든 항목을 다음과 동일한 리스트 엔벨로프에 담아 반환합니다. GET /sessions.

선택자를 그대로 전달

위의 모든 선택기 양식 — 다음을 포함하여 #42 그리고 프로필 패턴을 * — 표준 HTTP 클라이언트(Python)를 통해 있는 그대로 전송됩니다 requests, libhv, curl, fetch). 클라이언트 측에서 URL 인코딩을 할 필요가 없습니다. 셸에서는 다음과 같은 내용을 포함하는 토큰을 따옴표로 묶어야 합니다. # 또는 * (예: --session "#42", --session "co.haply.hub::*:0") 셸이 이를 주석으로 인식하거나 로컬 파일에 대해 글로브 확장을 수행하지 못하도록 하기 위해

한 가지 예외: 그 ? glob 메타문자는 URL 쿼리 구분자입니다 in 경로. 경로 형식 선택자(예: /sessions/defaul?:0) 반드시 다음과 같이 퍼센트 인코딩되어야 합니다 %3FGET /sessions/defaul%3F:0. 쿼리 형식의 선택자 (?session=defaul?:0), 첫 번째만 ? 쿼리를 분할하고 그 다음 ? 문자는 변경되지 않은 채로 전달됩니다.

WebSocket 세션에는 선택자가 필요하지 않습니다

웹소켓 연결에서, 당신은 세션 — 귀하의 configure 그리고 commands 항목은 자동으로 현재 세션의 기기를 대상으로 합니다. 세션 선택자는 다음의 경우에만 필요합니다. HTTP 요청(세션 간 원격 제어 포함 — 참조: 세션).