실시간 업데이트

API와 같은 호스트로 WebSocket을 열면 레코드가 바뀔 때 Fóir가 애플리케이션에 알려 줍니다. 각 이벤트에는 바뀐 대상의 id가 담기며, SDK는 이를 쿼리 캐시 업데이트로 바꿀 수 있습니다.

소켓 하나, 같은 키

구독은 API 자체 호스트에서 graphql-ws 프로토콜을 사용하며, 쿼리와 뮤테이션에 쓰는 것과 같은 API 키를 사용합니다. 자격 증명은 연결이 열릴 때 전송됩니다. 키, 그리고 로그인한 사용자가 있으면 그 사용자의 액세스 토큰입니다. 소켓 하나는 최대 32개의 라이브 구독을 유지합니다.

구독할 수 있는 것

recordChanged 구독은 한 모델의 레코드 변경을 보고합니다. 그 밖의 구독은 호출자 본인의 알림, 백그라운드 작업 진행 상황, 단일 오퍼레이션의 실행을 다룹니다. 모델을 구독하려면 읽기와 같은 읽기 권한이 필요하며, 레코드가 사용자별로 비공개인 모델에서는 스트림이 호출자 본인의 레코드로 걸러집니다.

이벤트에는 id가 담깁니다

레코드 이벤트에는 동작(created, updated, published, unpublished, deleted), 레코드의 id, 모델이 담깁니다. 무엇이 바뀌었는지만 식별하고 콘텐츠는 담지 않으므로, 레코드는 일반 API로 읽습니다. 각 이벤트에는 프로젝트별로 커밋 순서에 따른 시퀀스 번호도 있습니다. 구독할 때 적용한 가장 높은 번호를 전달하면 서버가 놓친 내용을 내구성 있는 로그에서 재전송한 뒤 실시간으로 이어 갑니다.

SDK의 구독 클라이언트

타입 지정 SDK는 모델마다 onChange 메서드를 제공하며, 구독 해제용 핸들을 반환합니다. 첫 구독에서 소켓을 열고 마지막 구독이 끝나면 닫습니다. 연결이 끊기면 지수 백오프로 재연결하고 라이브 구독을 다시 보냅니다.

라이브 모듈

@foir/sdk/live 모듈은 변경 스트림을 쿼리 캐시에 연결하며 React 바인딩이 있습니다. 편집하면 해당 레코드를 가진 쿼리만 다시 가져오고, 삭제는 메모리에서 적용되며, 생성은 개수로 보고됩니다. 모델마다 선택해서 사용합니다.

자세한 내용

구독 가이드는 엔드포인트, 각 구독과 이벤트 필드, 라이브 모듈을 다룹니다.