EWB API 소개

Download OpenAPI specification:

소개

EWB를 통한 workbook 제작을 사용하기 위한 API입니다.
EWB API를 활용한 개발을 시작하신다면, 아래의 안내를 먼저 확인해보세요.

EWB API는 RESTful 구조를 기반으로 합니다.
RESTful API는 표준 HTTP 메서드를 사용하여 자원에 접근하고 조작할 수 있는 방법을 제공합니다.

EWB의 개발 가이드는 수시로 업데이트됩니다. 업데이트 내용은 API 변경 이력을 통해 확인할 수 있습니다.


인증

EWB API는 JWT 토큰을 통해 사용자 인증을 수행합니다.
요청 시 Authorization 헤더에 Bearer {JWT 토큰} 형식으로 전달해야 합니다.
인증 방식에 따라 /admin/v1/main/v1와 같은 경로로 구분됩니다.

경로별 인증

  • 어드민 API
    경로: /admin/v1
    사용자 인증: 어드민 API는 사용자 ID와 비밀번호를 통해 인증하며, 인증 성공 시 액세스 토큰, 리프레시 토큰, 토큰 만료 시간이 반환됩니다.

  • 외부 API
    경로: /main/v1
    사용자 인증: 외부 API는 OAuth2 프로토콜을 사용하여 인증됩니다. OAuth2 인증 API는 /oauth2 경로로 시작합니다.

어드민 인증 흐름

어드민 인증은 /admin/v1/login API를 통해 수행됩니다.
인증이 성공하면 액세스 토큰, 리프레시 토큰, 토큰 만료 시간이 반환됩니다. 이후의 요청에서는 Authorization 헤더에 Bearer {JWT 토큰}을 포함해야 합니다.

OAuth2 인증 흐름

현재 지원되는 OAuth2 인증 제공자(registrationId)는 kakao입니다. OAuth2 인증 절차는 다음과 같습니다.

  1. 사용자가 /oauth2/authorization/{registrationId} 경로로 GET 요청을 보내면, 해당 OAuth2 Provider의 로그인 페이지로 리다이렉트됩니다.
  2. 사용자가 OAuth2 Provider에서 인증을 완료하면, 해당 Provider는 인가 코드(Authorization Code)를 애플리케이션에 전달합니다.
  3. 애플리케이션은 받은 인가 코드를 사용하여 OAuth2 Provider로부터 액세스 토큰(Access Token)을 요청합니다.
  4. OAuth2 Provider는 액세스 토큰을 애플리케이션에 반환합니다.
  5. 애플리케이션은 받은 액세스 토큰을 사용하여, 애플리케이션에서 사용할 자체 액세스 토큰과 리프레시 토큰을 생성합니다.
  6. 생성된 액세스 토큰은 클라이언트와의 인증을 위해 사용되며, 리프레시 토큰은 액세스 토큰 갱신 시 사용됩니다.

EWB 서버에서는 사용자가 OAuth2 Provider에서 인증을 완료하면, 액세스 토큰과 리프레시 토큰 생성까지의 과정(2번 ~ 5번)을 내부적으로 처리하고 있습니다.
사용자가 로그인 페이지에서 인증을 완료하면 EWB 서버는 클라이언트에게 액세스 토큰, 리프레시 토큰, 토큰 만료 시간을 반환합니다.

응답

HTTP 응답 코드

코드 설명
200 OK 정상
400 Bad Request 파라미터 오류
401 Unauthorized 인증 오류
404 Not Found 존재하지 않는 요청
50x Server Error 서버 오류

응답 형식

특별한 경우를 제외하고 모든 응답은 JSON 형식으로 반환됩니다.

{
  "accessToken": "accessToken", 
  "accessTokenExpireTime": "2024-11-01T13:11:54.375",
  "refreshToken": "refreshToken", 
  "refreshTokenExpireTime": "2024-11-01T12:56:54.375"
}

에러 코드

EWB API를 사용할 때 발생할 수 있는 에러를 살펴보세요.

EWB prefix가 붙은 에러 코드는 세부 에러 코드가 정의되지 않은 경우 사용됩니다.

코드 에러 메시지(reason) 설명
EWB400 잘못된 요청입니다. 요청 값이 유효하지 않는 경우 발생
EWB401 인증에 실패하였습니다. 인증 서비스 권한이 없는 경우 발생
EWB403 권한이 없습니다. 해당 리소스에 대한 접근 권한이 없는 경우 발생
EWB404 리소스를 찾을 수 없습니다. 리소스가 존재하지 않을 때 발생
EWB500 서버 내부 오류가 발생하였습니다. 시스템 장애로 통신이 원활하지 않을 때 발생
ACCESS_TOKEN_EXPIRED access 토큰이 만료됨 만료된 access 토큰을 사용하고 있습니다.
REFRESH_TOKEN_EXPIRED refresh 토큰이 만료됨 만료된 refresh 토큰을 사용하고 있습니다.
INVALID_TOKEN 유효하지 않은 토큰 잘못된 형식의 토큰이 사용되었습니다.
MISSING_COOKIE 쿠키가 존재하지 않음 요청에 필수 쿠키가 포함되지 않았습니다.
BAD_CREDENTIALS 잘못된 자격 증명 제공된 자격 증명이 잘못되었습니다.
INVALID_AUTHORIZATION_HEADER 인증 헤더가 잘못됨 인증 헤더가 잘못된 형식입니다.
INFRASTRUCTURE_ERROR 외부 호출 오류 외부 서비스 호출에 문제가 발생하였습니다.
INTERNAL_SERVER_ERROR 서버 내부 오류 서버 내부에서 예상치 못한 오류가 발생하였습니다.
USER_NOT_FOUND 유저를 찾을 수 없음 요청된 유저가 존재하지 않습니다.

에러 응답

EWB API는 공통된 에러 응답을 사용합니다. 아래는 응답 JSON 예시입니다.

{
  "code": "ACCESS_TOKEN_EXPIRED",
  "message": "토큰이 만료되었습니다.",
  "status": 401
}

API 변경 이력

v0.1.0

  • API 문서화 및 semantic versioning 적용

v0.2.0

  • /v1 으로 시작하는 엔드포인트 /admin/v1으로 경로 변경 (File API, WorkBook API)

v0.3.0

  • 수능/모의고사 워크북 상품 등록 API 추가

v0.4.0

  • 수능/모의고사 워크북 상품 조회 API 추가
  • 파일 다운로드 API 추가

v1.0.0

  • easyworkbook 운영 서비스 배포

v1.1.0

  • 수능/모의고사 워크북 수정 API 추가

v1.2.0

  • 모의고사/수능 워크북 데이터 조회 API(/admin/v1/csat-work-book) 에 passageId 필드를 응답에 추가

v1.3.0

  • 모의고사/수능 원본 데이터 조회 API 추가

Authentication API

어드민 로그인, 로그아웃, 토큰 재발급 API 입니다.

어드민 토큰 재발급 API

어드민 사용자의 리프레시 토큰을 이용하여 새로운 액세스 토큰을 생성합니다. 사용자는 리프레시 토큰을 Authorization 헤더에 'Bearer {token}' 형식으로 제공하며, API는 새로운 액세스 토큰을 반환합니다.

header Parameters
Authorization
string

Responses

Response samples

Content type
application/json
Example

Authorization Header가 잘못되었을 때 발생합니다.

{
  • "code": 401,
  • "description": "인증 헤더가 잘못됨",
  • "errorCode": "INVALID_AUTHORIZATION_HEADER",
  • "message": "Authorization Header가 잘못되었을 때 발생합니다."
}

어드민 로그아웃 API

어드민 사용자가 로그아웃을 요청할 때 사용됩니다. 사용자는 로그인 시 받은 액세스 토큰을 Authorization 헤더에 'Bearer {token}' 형식으로 제공해야 합니다.

header Parameters
Authorization
string

Responses

Response samples

Content type
application/json
Example

Authorization Header가 잘못되었을 때 발생합니다.

{
  • "code": 401,
  • "description": "인증 헤더가 잘못됨",
  • "errorCode": "INVALID_AUTHORIZATION_HEADER",
  • "message": "Authorization Header가 잘못되었을 때 발생합니다."
}

어드민 로그인 API

어드민 사용자의 로그인 요청을 처리합니다. 사용자는 유효한 아이디와 비밀번호를 제공해야 하며, 성공적인 인증 후 JWT 토큰을 반환받습니다. 이 토큰은 다른 어드민 API 요청에 사용됩니다.

Request Body schema: application/json
required
username
required
string

어드민 사용자 아이디

password
required
string

어드민 사용자 비밀번호

Responses

Request samples

Content type
application/json
{
  • "username": "string",
  • "password": "string"
}

Response samples

Content type
application/json

아이디 또는 비밀번호가 잘못되었을 때 발생합니다.

{
  • "code": 401,
  • "description": "잘못된 자격 증명",
  • "errorCode": "BAD_CREDENTIALS",
  • "message": "아이디 또는 비밀번호가 잘못되었을 때 발생합니다."
}

WorkBook API

교재 제작할 때 사용하는 API 입니다.

모의고사/수능 워크북 수정 API

모의고사/수능 워크북을 수정합니다. 수정 가능한 항목은 다음과 같습니다.

  • 주제
  • 요약
  • 지문
  • 해설

요청 정보는 다음과 같습니다.

  • HTTP 메서드: PATCH (리소스의 부분 수정)
  • 변수(passageId): 수정할 지문의 식별자
  • 필수 파라미터: 문제 번호(questionNumber) - 수정할 문제 번호

중요: sentences 필드의 특별한 처리

이 API는 PATCH 메서드를 사용하지만, sentences 필드에 대해서는 특별한 처리 방식을 사용합니다:

  1. sentences 필드가 요청에 포함되면 해당 문제의 모든 문장을 완전히 교체합니다. 따라서 일부 문장만 변경하려면 변경된 문장을 포함한 전체 문장 목록을 제공해야 합니다.
  2. sentences 필드가 요청에 포함되지 않으면 문장 목록은 변경되지 않습니다. 이 API는 sentences 필드에 대해 PUT과 유사한 전체 교체 방식을 사용하므로 이 점을 고려하여 요청을 구성해 주세요.
path Parameters
passageId
required
integer <int64>
Request Body schema: application/json
required
subject
string or null

주제

summary
string or null

요약

Array of objects or null or null (SentenceRequest)

문장 목록

Responses

Request samples

Content type
application/json
{
  • "subject": "string",
  • "summary": "string",
  • "sentences": [
    ]
}

모의고사/수능 워크북 상태 조회 API

모든 워크북의 상태를 조회합니다.

상태는 다음과 같습니다.

  • IN_PROGRESS: 준비 중
  • READY: 준비 완료
query Parameters
year
string
grade
integer <int32>
months
Array of strings
Items Enum: "JANUARY" "FEBRUARY" "MARCH" "APRIL" "MAY" "JUNE" "JULY" "AUGUST" "SEPTEMBER" "OCTOBER" "NOVEMBER" "DECEMBER"

Responses

모의고사/수능 원본 데이터 조회 API

모의고사/수능 원본 데이터를 조회합니다. 스프레드 시트를 통해 만들어진 원본 데이터를 조회할 수 있습니다.

path Parameters
metadataId
required
integer <int64>

Responses

모의고사/수능 워크북 데이터 조회 API

워크북을 제작할때 사용할 책 전체 데이터 조회 API

query Parameters
metaDataId
required
integer <int64>
grade
required
integer <int32>
yearMonth
required
string

Responses

수능특강 워크북 데이터 조회 API

수능특강 워크북을 제작할 때 사용할 전체 데이터를 조회합니다.

path Parameters
metaDataId
required
integer <int64>

Responses

수능특강 워크북 상태 조회 API

모든 수능특강 워크북의 상태를 조회합니다.

상태는 다음과 같습니다.

  • IN_PROGRESS: 준비 중
  • READY: 준비 완료
query Parameters
year
string

Responses

Product API

상품 관련 조회할 때 사용하는 API 입니다.

모의고사/수능 워크북 상품 수정 API

path Parameters
productId
required
integer <int64>
Request Body schema: multipart/form-data
name
required
string

상품 이름

examGrade
required
integer <int32>

시행 학년

examDay
required
string <date>

실제 시험 날짜

displayStatus
required
string
Enum: "DISPLAY_PENDING" "DISPLAY"

상품 상태

thumbnailImage
required
string <binary>
workbookFile
required
string <binary>

Responses

모의고사/수능 워크북 상품 등록 API

Request Body schema: multipart/form-data
name
required
string

상품 이름

examGrade
required
integer <int32>

시행 학년

examDay
required
string <date>

실제 시험 날짜

thumbnailImage
required
string <binary>
workbookFile
required
string <binary>

Responses

모의고사/수능 워크북 상품 전시 대기 상태로 변경 API

path Parameters
productId
required
integer <int64>

Responses

모의고사/수능 워크북 상품 전시상태로 변경 API

path Parameters
productId
required
integer <int64>

Responses

상품 조회 API (신규)

query Parameters
required
object (ProductSearchRequest)
page
string <integer>
Default: "0"
Example: page=0

페이지 번호

첫번째 페이지 번호는 0부터 시작합니다.

size
string <integer> [ 1 .. 100 ]
Default: "20"
Example: size=20

페이지 크기

한 페이지에 조회할 항목의 갯수를 설정합니다.

최대 100개의 항목을 한번에 조회가능합니다.

Responses

상품 조회 API (레거시)

query Parameters
required
object (ProductSearchRequest)
required
object (PageRequest)

Responses

Attachment API

상품 관련 조회할 때 사용하는 API 입니다.

첨부파일 다운로드 URL 요청 API

path Parameters
id
required
integer <int64>

Responses

OAuth2 API

OAuth2 로그인, 로그아웃, 토큰 재발급 API

OAuth2 토큰 재발급 API

사용자의 리프레시 토큰을 이용하여 새로운 액세스 토큰을 생성합니다. 클라이언트는 'refreshToken' 이라는 이름의 쿠키에 리프레시 토큰을 포함하여 요청을 보내야 합니다. 서버에서 요청을 검증한 후 새로운 액세스 토큰을 발급합니다.

cookie Parameters
refreshToken
string

Responses

OAuth2 로그아웃 API

사용자가 로그아웃을 요청할 때 사용됩니다. 로그인 시 받은 액세스 토큰을 Authorization 헤더에 'Bearer {token}' 형식으로 제공해야 합니다.

header Parameters
Authorization
string

Responses

OAuth2 로그인 API

OAuth2 로그인 API입니다.

현재 지원하는 OAuth2 Provider(registrationId)는 kakao입니다. oauth2/authorization/{registrationId} 로 GET 요청을 보내면 OAuth2 로그인 페이지로 리다이렉트 됩니다.

OAuth2 인증 후 사용자를 리디렉션할 호스트 정보를 전달하기 위해, 요청 시 쿼리 파라미터로 host 값을 포함해야 합니다. 이를 통해 애플리케이션은 인증이 완료된 후 사용자를 적절한 클라이언트 애플리케이션으로 리다이렉트할 수 있습니다.

OAuth2 로그인 과정은 다음과 같습니다.

  1. 사용자가 /oauth2/authorization/{registrationId}로 GET 요청을 보내면, 해당 OAuth2 Provider의 로그인 페이지로 리다이렉트됩니다.
  2. 사용자가 OAuth2 Provider에서 인증을 완료하면, 해당 Provider는 인가 코드(Authorization Code)를 애플리케이션에 전달합니다.
  3. 애플리케이션은 받은 인가 코드를 사용하여 OAuth2 Provider로부터 액세스 토큰(Access Token)을 요청합니다.
  4. OAuth2 Provider는 액세스 토큰을 애플리케이션에 반환합니다.
  5. 애플리케이션은 받은 액세스 토큰을 사용하여, 애플리케이션에서 사용할 자체 액세스 토큰과 리프레시 토큰을 생성합니다.
  6. 생성된 액세스 토큰은 클라이언트와의 인증을 위해 사용되며, 리프레시 토큰은 액세스 토큰 갱신 시 사용됩니다.

Responses

User API

사용자(유저) 관련 API

사용자 정보 가져오기 API V2

현재 로그인한 사용자의 정보를 가져옵니다.

Responses

사용자 정보 가져오기 API Deprecated

현재 로그인한 사용자의 정보를 가져옵니다.

해당 API는 V2 버전이 존재합니다. 향후 V1 버전은 제거될 예정입니다.

Responses

CsatProduct API

모의고사/수능 워크북 상품을 조회하고 다운로드 하는 API 입니다.

모의고사/수능 워크북 상품 목록 조회 API

모의고사/수능 워크북 상품 목록을 조회합니다.

해당 API는 인증이 필요하지 않습니다. 워크북 파일을 다운로드 받을 때 사용자 인증이 필요합니다.

query Parameters
page
string <integer>
Default: "0"
Example: page=0

페이지 번호

첫번째 페이지 번호는 0부터 시작합니다.

size
string <integer> [ 1 .. 100 ]
Default: "20"
Example: size=20

페이지 크기

한 페이지에 조회할 항목의 갯수를 설정합니다.

최대 100개의 항목을 한번에 조회가능합니다.

year
string
grade
integer <int32>
months
Array of strings
Items Enum: "JANUARY" "FEBRUARY" "MARCH" "APRIL" "MAY" "JUNE" "JULY" "AUGUST" "SEPTEMBER" "OCTOBER" "NOVEMBER" "DECEMBER"

Responses