Skip to main content
Edicus는 서버용 JS SDK를 제공하지 않습니다. 서버 연동은 HTTP 엔드포인트를 직접 호출해서 합니다. 언어와 런타임을 가리지 않고, 새 엔드포인트가 생겨도 패키지 업데이트를 기다릴 필요가 없습니다. 이 페이지는 그 직접 호출을 매번 다시 쓰지 않도록 얇은 래퍼를 하나 만들고, 자주 쓰는 호출을 그 래퍼로 보여 줍니다. 예제는 TypeScript의 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
다른 언어는 각자의 OpenAPI 생성기를 쓰면 됩니다. 리소스 호스트(/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)에 남으므로 직접 확인하셔야 합니다.

복제

응답에는 복제본의 id와 프리뷰 썸네일 목록(preview_tns, 각 항목에 url)이 함께 옵니다. 복제본의 제목에는 (복제됨)이 붙습니다. 포토북처럼 이미지가 많으면 수십 초 이상 걸려 타임아웃이 날 수 있으니 그런 경우 비동기 복제를 씁니다.
비동기 복제는 202 Accepted로 새 id를 즉시 반환하고 복제는 서버에서 계속됩니다. 그동안 프로젝트 상태는 cloning이고, 끝나면 editing이 됩니다. callback_url을 주면 끝났을 때 그 주소로 결과를 POST합니다. 콜백 body와 재시도 규칙은 비동기 복제 레퍼런스에 있습니다.
cloning 상태인 프로젝트를 편집기로 열면 로드에 실패합니다. 프로젝트를 조회해 상태를 확인한 뒤 여세요.
같은 원본에 복제 요청이 동시에 들어와도 서버가 막지 않습니다. 중복 요청을 막아야 한다면 호출하는 쪽에서 직접 처리하셔야 합니다.
복제가 실패하면 원본이 없을 때 404 project_not_found, template_uri가 없는 프로젝트일 때 409 project_not_clonable입니다.

삭제

editing 상태인 프로젝트만 삭제할 수 있고, 주문된 프로젝트는 409 project_not_editing입니다. 주문 완료된 프로젝트는 보관 기간(3~4주)이 지나면 자동으로 삭제됩니다. 성공하면 빈 객체 {}가 옵니다.

리소스 호스트 호출하기

상품과 리소스 엔드포인트는 호스트가 다릅니다. host: 'resource'를 주면 됩니다.
리소스 호스트는 오류 body의 모양이 다릅니다. error 객체가 없고, 400은 JSON 문자열 하나(예: "no option"), 401은 {"code": ...}, 500은 빈 객체 {}인 경우가 많습니다. 위 래퍼는 res.ok로 실패를 잡지만 code와 requestId는 비어 있을 수 있습니다. 자세한 차이는 오류 처리를 보세요.

다음 단계

주문

잠정 주문과 확정 주문을 넣습니다.

오류 처리

상태 코드와 error.code로 실패를 다룹니다.