POST를 보내도록 합니다. 개발자는 API를 폴링하지 않고도 Alforse의 변경 사항에 반응하기 위해 웹훅을 사용합니다.
웹훅의 동작 방식
- 각 웹훅은 하나의 테이블과 하나 이상의 트리거 작업을 감시합니다.
- 일치하는 변경이 발생하면 Alforse는 전송을 큐에 넣고 비동기로 보내며, 보통 몇 초 이내에 전달됩니다.
- 각 전송은 해당 웹훅에 속한 비밀 값으로 서명되므로, 엔드포인트는 요청이 Alforse에서 왔음을 증명할 수 있습니다.
- 본문은 레코드가 변경되었다는 알림입니다. 조치를 취하기 전에 API 키로 현재 레코드를 가져오십시오.
구독 가능한 테이블
배포 환경에서 허용되는 테이블은 웹훅 양식의 테이블 드롭다운을 기준으로 하십시오. 테이블은 일부 작업만 발행하므로 트리거 선택지도 테이블에 따라 달라집니다.
receipt는 삽입과 삭제를 발행하고, employee는 업데이트만 발행합니다.
웹훅 설정
웹훅을 생성하고 관리하려면 설정 → 웹훅으로 이동합니다. 다음 필드를 입력합니다.
Alforse는 루프백, 사설 네트워크, 링크 로컬, 클라우드 메타데이터 주소로의 전송을 거부합니다. 이는 웹훅이 내부 시스템에 접근하는 데 악용되는 것을 막습니다.
웹훅 목록에는 전송 시도를 기준으로 집계한 성공 횟수와 오류 횟수가 웹훅별로 표시됩니다.
전송 내용
본문
본문은 네 개의 필드로 구성된 JSON입니다.헤더
이벤트 id를 멱등성 키로 사용하십시오. 하나의 변경은 모든 재시도에서 같은 이벤트 id를 유지하며, 새로운 변경은 이미 알림을 받은 레코드에 대한 두 번째 업데이트를 포함하여 항상 새로운 id를 받습니다.
전송과 재시도
전송은 최소 한 번(at least once) 보장됩니다. 엔드포인트가 다음에 해당하면 Alforse는 해당 시도를 실패로 간주하고 지수 백오프로 최대 8회까지 재시도합니다.- 10초 이내에 성공 상태를 반환하지 않는 경우
5xx또는429를 반환하는 경우
- 그 외의
4xx응답은 해당 변경의 전송을 종료합니다. - Alforse는 리디렉션을 따라가지 않으므로
3xx응답은 실패로 간주됩니다. 최종 URL을 설정하십시오. - 거부된 주소로의 전송은 재시도하지 않습니다.
엔드포인트 설계
- 중복을 예상하십시오. 첫 번째 시도를 이미 처리한 뒤에 재시도가 도착할 수 있습니다. 하나의 레코드에 대한 별개의 변경은
type과record.id가 같으므로, 이 조합이 아니라x-omeriva-webhook-event로 중복을 제거하십시오. - 장애 후에는 정합성을 맞추십시오. 폐기된 변경은 다시 전송되지 않습니다. 모든 이벤트를 처리해야 한다면 엔드포인트가 중단되었던 이후에 API를 조회하여 따라잡으십시오.
전송 검증
웹훅을 생성하면 해당 웹훅 고유의 서명 비밀 값도 생성되며, Alforse는 이를 암호화하여 보관합니다.x-omeriva-webhook-signature의 서명은 `${timestamp}.${body}`에 대한 HMAC-SHA256의 16진수 값이며, 비밀 문자열을 키로 사용합니다. timestamp는 x-omeriva-webhook-timestamp의 값이고 body는 원본 요청 본문입니다.
전송을 검증하려면 다음과 같이 합니다.
- 파싱하기 전에 원본 본문을 확보합니다. JSON을 파싱했다가 다시 직렬화하면 바이트가 바뀌어 서명이 깨집니다.
- HMAC을 계산하여
v1=뒤의 값과 상수 시간 비교로 대조합니다. - 시계와 5분 넘게 차이 나는 타임스탬프는 거부하여 캡처된 요청의 재생을 막습니다. 모든 재시도는 새 타임스탬프로 다시 서명되므로 정상적인 재시도는 통과합니다.