fetch지만 어느 언어로 옮기셔도 동작은 같습니다.
Server API는
edicus-api-key 헤더를 요구합니다. 반드시 서버에서만 호출하세요. 이 키 하나로 그 파트너의 모든 사용자와 프로젝트, 주문에 접근할 수 있습니다. 브라우저에는 이 API로 발급받은 토큰만 내려보냅니다.호스트가 둘입니다
경로 앞이
/v2면 앞의 호스트, /resapi나 /manapi면 뒤의 호스트입니다.
공통 헤더
래퍼 하나 만들기
매 호출마다 헤더를 붙이고 오류를 확인하는 코드가 반복되므로, 한 번 감싸 두고 쓰시기를 권합니다.server/edicus.ts
res.ok가 아니면 실패입니다. api.edicus.io에서는 error.code로 원인을 구분하고, 로그에는 requestId를 함께 남기세요. 엔드포인트별로 오는 error.code와 대응 방법은 오류 처리에 정리돼 있습니다.
AbortSignal.timeout()은 Node.js 18 이상에서 쓸 수 있습니다. 그보다 낮은 버전이면 AbortController와 setTimeout으로 직접 만드세요.응답 타입
api.edicus.io의 요청과 응답 모양은 OpenAPI 문서 하나에 정의돼 있습니다. TypeScript라면 이 문서에서 타입 파일을 만들어 씁니다.
server/edicus-types.ts
/resapi, /manapi)는 이 문서에 들어 있지 않으므로 필요한 필드만 직접 타입으로 적습니다.
@edicus/sdk/types는 편집기 메시지와 띄우기 옵션의 타입만 내보냅니다. Server API의 응답 타입은 들어 있지 않습니다.uid는 호출할 때마다 넘깁니다
사용자 단위 요청은edicus-uid 헤더가 없거나 형식 규칙을 어기면 400 invalid_request입니다. 이 헤더를 클라이언트 수준의 기본값으로 고정해 두면 다른 사용자의 프로젝트를 건드리게 되므로, 로그인한 사용자의 uid를 호출할 때마다 넘기시는 편이 안전합니다.
edicus-uid를 요구하는지는 Server API 레퍼런스의 각 페이지에 표시돼 있습니다.
엔드포인트 한눈에 보기
각 엔드포인트의 요청과 응답 필드는 Server API 레퍼런스에서 확인하세요.
프로젝트 다루기
project_id이거나 그 사용자의 프로젝트가 아니면 404 project_not_found입니다.
목록 조회의 응답은 { projects: [...] }로 감싸여 있습니다. 프로젝트가 없으면 빈 배열입니다.
프리뷰 썸네일
urls가 빈 배열입니다.
여러 프로젝트를 한 번에 조회할 때는 POST /v2/projects/preview_urls를 씁니다. 한 번에 최대 25개이고, 넘기면 400 invalid_request입니다. 요청 전에 직접 끊어 보내세요.
항목별 실패는 요청 전체의 실패가 아닙니다. 응답은 200이고, 실패한 항목만
results[i].error(예: no_preview_urls)에 남으므로 직접 확인하셔야 합니다.복제
preview_tns, 각 항목에 url)이 함께 옵니다. 복제본의 제목에는 (복제됨)이 붙습니다. 포토북처럼 이미지가 많으면 수십 초 이상 걸려 타임아웃이 날 수 있으니 그런 경우 비동기 복제를 씁니다.
202 Accepted로 새 id를 즉시 반환하고 복제는 서버에서 계속됩니다. 그동안 프로젝트 상태는 cloning이고, 끝나면 editing이 됩니다. callback_url을 주면 끝났을 때 그 주소로 결과를 POST합니다. 콜백 body와 재시도 규칙은 비동기 복제 레퍼런스에 있습니다.
복제가 실패하면 원본이 없을 때 404 project_not_found, template_uri가 없는 프로젝트일 때 409 project_not_clonable입니다.
삭제
editing 상태인 프로젝트만 삭제할 수 있고, 주문된 프로젝트는 409 project_not_editing입니다. 주문 완료된 프로젝트는 보관 기간(3~4주)이 지나면 자동으로 삭제됩니다. 성공하면 빈 객체 {}가 옵니다.
리소스 호스트 호출하기
상품과 리소스 엔드포인트는 호스트가 다릅니다.host: 'resource'를 주면 됩니다.
다음 단계
주문
잠정 주문과 확정 주문을 넣습니다.
오류 처리
상태 코드와
error.code로 실패를 다룹니다.