GET /v1/task/{task_id}을 폴링하거나, WideRouter에
https URL을 전달하여 결과가 사용자에게 오도록 할 수 있습니다. 두 번째 방식이 콜백이며, 이는 특정 모델이 아니라 작업 API 자체의 기능입니다. 따라서 Nano Banana 이미지와 Grok Imagine
동영상 모두 동일한 필드, 동일한 페이로드 및 동일한 규칙이 적용됩니다.
폴링을 사용하려면 모든 요청에 API 키가 필요합니다. 콜백에는 API 키가 필요하지 않습니다. 수신기는 사용자가 호스팅하는 URL이며, WideRouter가 해당 URL을 호출하므로 로드하거나 전달하거나 잘못 입력할 인증 정보가 없습니다. 폴러가
401에 응답하거나 처리 중인 작업이 수천 개라면 이 페이지가 적합합니다.제출 시 필드 하나
model 및 input 옆에 callback_url을 추가합니다. 요청의 다른 내용은
변경되지 않으며, 제출 응답은 다른 경우에 받게 되는 것과 동일한 작업 ID입니다.
400 invalid_callback_url이고, 잘못된 비밀 키는 param이
callback_secret로 설정된 400 invalid_params입니다.
WideRouter가 전송하는 내용
작업당POST 하나가 전송되며, 작업이
최종 상태에 도달할 때 Content-Type: application/json됩니다. 본문을 파싱하기 전에 라우팅하고
인증할 수 있도록 세 개의 헤더가 제공됩니다.
본문은 해당 시점에
GET /v1/task/{task_id}가 반환하는 작업 객체와 바이트 단위로
동일합니다. 콜백 경로와 폴링 경로 모두 하나의 파서를 사용합니다.
- task.completed
- task.failed
task.failed는
과금이 취소되었다는 신호이기도 합니다. 출력 파일은 작업 ID를 이름으로
사용하므로 이름을 변경하지 않고도 쉽게 정리할 수 있습니다.
전달 규칙
다음 두 가지 결과를 고려하여 설계하는 것이 좋습니다.
- 멱등성을 보장하십시오. 느린
200이후 재시도되면 동일한 작업이 두 번 도착할 수 있습니다.id를 기준으로 핸들러의 키를 지정하십시오. - 지연된 작업을 위한 폴링 대체 경로를 유지하십시오. 제출 시 작업 ID를 저장하십시오. 모델의 일반적인 지연 시간보다 몇 분이 지난 후에도 콜백이 도착하지 않으면 작업을 한 번 조회하십시오. 콜백은 지연 시간을 줄이는 최적화일 뿐, 전달을 보장하지는 않습니다.
서명 확인
제출 시callback_secret을 전송하며 해당 작업의 모든 콜백에는
X-Wide-Signature이 포함됩니다. 이는 두 가지를 증명합니다. 요청이 WideRouter에서
발송되었으며, 전송 중 본문이 변경되지 않았다는 것입니다. 이는 암호화가 아닙니다. 본문에는
공개 URL만 포함됩니다.
t은 콜백이 전송된 유닉스 시간입니다. v1은
hex(HMAC-SHA256(callback_secret, "<t>.<raw body>"))입니다. 즉 타임스탬프, 마침표,
그리고 수신한 그대로의 요청 본문입니다.
1
원시 본문을 가져옵니다
다이제스트는 바이트를 대상으로 계산됩니다. JSON을 파싱한 다음 다시 직렬화하면
바이트가 변경되므로, 프레임워크가 본문을 처리하기 전에 읽어야 합니다.
2
재계산한 후 일정 시간 비교를 수행합니다
동일한 시크릿으로 HMAC을 다시 생성하고 일정 시간 비교 함수를 사용하여 비교합니다. 절대로
==을 사용해서는 안 됩니다.3
오래된 타임스탬프를 거부합니다
t이 어느 방향으로든 현재 시각에서 300초 넘게 차이 나는 항목은
삭제합니다. 이렇게 하면 캡처된 콜백이 나중에 재생되는 것을 방지할 수 있습니다.
테스트에서 측정된 시간 차이는 약 3초였습니다.callback_secret이 없으면 서명 헤더도 없으며, callback_url의 추측하기 어려운
경로만이 사용자와 위조된 “완료” 상태 사이를 막는 유일한 수단입니다.
어느 경우든 작업을 다운로드하거나 과금하기 전에 API 키를 사용하여
GET /v1/task/{task_id}을 다시 읽어야 합니다. 서명은 누가 콜백을 보냈는지 증명하고,
다시 읽은 결과는 현재 작업 상태가 무엇인지 증명합니다.
세 언어로 구현한 수신기
각 핸들러는 동일한 다섯 가지 작업을 수행합니다. 원시 본문에 대한 서명을 확인하고, 이벤트 헤더를 검사하며,200로 즉시 응답하고, 작업 ID를 큐에 전달한 다음, 워커가 작업을 다시 읽고 결과를 다운로드하도록 합니다.
verify 함수는 이전 섹션에서 사용한 함수입니다. 결과가 수 메가바이트에 이를 수 있고 응답할 수 있는 시간이 10초이므로, 다운로드 작업은 의도적으로 요청 핸들러 외부에서 수행합니다.
서버 없이 사용해 보기
공개https URL을 제공하는 모든 요청 검사 서비스는 임시 수신기로 사용할 수 있습니다. 해당 URL을 callback_url로 지정하여 작업을 제출하고, 검사기에 작업 객체가 도착하는지 확인하면 됩니다. 직접 운영하는 머신에서 수신할 준비가 되면, 로컬 포트로 연결되는 https 터널을 사용해 동일한 작업을 수행할 수 있습니다. URL은 인터넷에서 연결 가능해야 하며, LAN 주소는 제출 시 거부된다는 점에 유의하시기 바랍니다.
즉시 다운로드
출력 URL은 작업 완료 후 24시간이 지나면 작동하지 않으며, 콜백은 해당 URL의 존재를 알 수 있는 가장 이른 시점입니다. 수신 시 다운로드하는 수신기는 만료를 고려할 필요가 없지만, URL만 저장했다가 나중에 읽는 수신기는 결국 아무것도 가리키지 않는 링크를 저장하게 됩니다.다음 단계
비동기 작업 API
엔벌로프, 폴링 루프, 작업 상태 및 오류 표입니다.
빠른 시작
약 5분 안에 제출하고, 폴링하고, 다운로드합니다.