사용자 인증 및 인가

사용자 로그인

HTTP request

POST /auth/login HTTP/1.1
Content-Type: application/json
Content-Length: 91
Host: localhost:8080

{
  "authorizationCode" : "authorizationCode",
  "state" : "state",
  "provider" : "test"
}

Request fields

필드명 타입 필수값 설명 제약사항

authorizationCode

String

true

OAuth 인증 코드

state

String

true

OAuth 상태값

provider

String

true

OAuth 제공자 (예: GOOGLE, NAVER, KAKAO)

Response cookies

쿠키명 필수값 설명

accessToken

true

액세스 토큰

refreshToken

true

리프레시 토큰

사용자 로그아웃

HTTP request

POST /auth/logout HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

Response cookies

쿠키명 필수값 설명

accessToken

true

액세스 토큰 (삭제됨)

refreshToken

true

리프레시 토큰 (삭제됨)

문서 API

문서 리스트 조회

HTTP request

GET /notes HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiZDUyYzhkYTMtYzY4NS00YjkyLWEyMmEtNDZlZWI4NDljYjdhIiwiZXhwIjoxNzQ2NTEzOTExfQ.6cNrV5Hw8DWfJWXDYWLVDmekZiRS4RguMK9wK6u1O-7KWEqHvYvj2JUPkhLC2crd
Host: localhost:8080

Response fields

필드명 타입 필수값 양식 설명

notes

Array

true

문서 목록

notes[].id

String

true

문서 ID

notes[].title

String

true

문서 제목

notes[].icon

String

true

문서 아이콘

notes[].children

Array

true

하위 문서 목록

문서 생성

HTTP request

POST /notes HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiM2FlOWY0YzQtNWQ2Mi00YzM4LThhM2ItNTk3MGVhOTMyOWQ5IiwiZXhwIjoxNzQ2NTEzOTExfQ.MMmxIcSsYG_0prVwfKqvS8CbgY9LKoVHDrzZfQmrsfvRPBHRHErkULcTCzShuBdy
Content-Length: 57
Host: localhost:8080

{
  "parentId" : "7865b717-7104-4041-8c76-2996cc94e56f"
}

Request fields

필드명 타입 필수값 설명 제약사항

parentId

String

true

부모 문서 ID

Response fields

필드명 타입 필수값 양식 설명

id

String

true

생성된 문서 ID

문서 삭제

HTTP request

DELETE /notes/d8793134-94ed-4ae5-b8d0-5dc25c23ec1e HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiYmJlZDA1NWEtMjhiNC00ZmRiLWE5ZmYtZmZkMjJkZGE1YjA4IiwiZXhwIjoxNzQ2NTEzOTExfQ.KTx1X_hRq4L7QFveaOoCvg73ysyJexjzLdybbviEkagFT5NeecLPCs9MyYU4ewC7
Host: localhost:8080

문서 상세 조회

HTTP request

GET /notes/468cf2ea-642b-4d8b-b6d4-b40bafa3aeb4 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiYjM3M2E1YjktMmRlOS00ZjJmLWFmZDktZmFkYjJmN2ViYTZhIiwiZXhwIjoxNzQ2NTEzOTExfQ.oAzxyG_g7aXLBVYnCiF-QZIhzxFsBxyoWZfAcleKrx3vZBBvvva7ooPRs1piwJIF
Host: localhost:8080

Response fields

필드명 타입 필수값 양식 설명

title

String

true

문서 제목

icon

String

true

문서 아이콘

tags[].name

String

true

문서 태그 목록

tags[].color

String

true

문서 태그 색상

cover

String

true

문서 커버 이미지

문서 부분 수정

HTTP request

PATCH /notes/25a4db5b-9969-41d6-b024-acc095ee60a6/title HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiNTQ0NjVmMmEtODM5Mi00YjNkLWI3YzgtYjdkNzIzZDljM2RiIiwiZXhwIjoxNzQ2NTEzOTExfQ.TXPPyzjf48ZRVtJt9HdJgWmubEArHOpheveJrmsPHBMEtTb_pmN0vWMyMfssRCFD
Content-Length: 23
Host: localhost:8080

{
  "value" : "value"
}

Request fields

필드명 타입 필수값 설명 제약사항

value

String

true

수정할 값

문서 태그 수정

HTTP request

PATCH /notes/ac346de3-ff63-4044-8913-5eeb06ae2b10/tags HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiMjBlMWM4N2ItYmRjMC00NzJiLTlhODctZjk0ZjM1NmJmM2YwIiwiZXhwIjoxNzQ2NTEzOTExfQ.ZGArOfiyLdKRgBG6x9jKOnYpnHLDSUlPhZsoGPO2OX0EGqeZLo6zzM9Tb3NSzfFL
Content-Length: 121
Host: localhost:8080

{
  "tags" : [ {
    "name" : "tag",
    "color" : "line_one"
  }, {
    "name" : "tag",
    "color" : "line_two"
  } ]
}

Request fields

필드명 타입 필수값 설명 제약사항

tags[].name

String

true

태그 이름

tags[].color

String

true

태그 색상

블록 API

블록 생성

HTTP request

POST /blocks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiYmFkMTQ0MWUtZDU3MS00NGU0LThkMjQtNGFlYmY4OTQ4ZjUyIiwiZXhwIjoxNzQ2NTEzOTExfQ.61ij1aM3mhFzJLnOVs5PC1ZxqANsyadQH4rzw_Hsr1XlMcASwTfzuOvWcnq8hD-M
Content-Length: 273
Host: localhost:8080

{
  "noteId" : "72e0df48-044e-4c29-90c5-7dec7cbfe2c1",
  "type" : "DEFAULT",
  "upperOrder" : 1,
  "nodes" : [ {
    "content" : "content1",
    "style" : {
      "key" : "value1"
    }
  }, {
    "content" : "content2",
    "style" : {
      "key" : "value2"
    }
  } ]
}

Request fields

필드명 타입 필수값 설명 제약사항

noteId

String

true

문서 ID

type

String

true

블록 타입

upperOrder

Number

true

블록 순서

nodes

Array

true

노드 리스트

nodes[].content

String

true

노드 내용

nodes[].style

Object

true

노드 스타일

nodes[].style.key

String

true

스타일 키

Response fields

필드명 타입 필수값 양식 설명

id

String

true

생성된 블록 ID

블록 리스트 조회

HTTP request

GET /blocks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiNTlmOGQ3NjEtYjY2OC00MjVmLTgyZDctOTdmMWIwZTA4YjVkIiwiZXhwIjoxNzQ2NTEzOTExfQ.qC2q4UgA9gUVj-ak0PLUGmEXeFMXYj8Q7JZRlVxwHSakuO5KZreu2sJR9hLIdgZq
Content-Length: 55
Host: localhost:8080

{
  "noteId" : "cd9b1b14-9a1c-49cf-a993-b20ae410940e"
}

Request fields

필드명 타입 필수값 설명 제약사항

noteId

String

true

문서 ID

Response fields

필드명 타입 필수값 양식 설명

blocks

Array

true

Block 리스트

blocks[].block.id

String

true

블록 ID

blocks[].block.type

String

true

블록 타입

blocks[].block.order

Number

true

블록 순서

blocks[].block.documentId

String

true

문서 ID

blocks[].block.memberId

String

true

회원 ID

blocks[].block.nodes

Array

true

블록 노드 리스트

blocks[].block.nodes[].content

String

true

노드 내용

blocks[].block.nodes[].style

Object

true

노드 스타일

blocks[].block.nodes[].style.key

String

true

스타일 키

블록 노드 변경

HTTP request

PATCH /blocks/009aba54-c597-43fa-adb7-ef698acf58fe/nodes HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiODQ5NjNkMmYtM2E2NS00NWQ3LWEwYzQtOTVjZTA0Y2I1ZTNlIiwiZXhwIjoxNzQ2NTEzOTExfQ.gjj6ZbdPCyAuPtN-qLFDb2S7lNc8pqvVWPxXkkoZorpc_8Ncp0jir6GNkcIsrlVd
Content-Length: 96
Host: localhost:8080

{
  "nodes" : [ {
    "content" : "content",
    "style" : {
      "key" : "value"
    }
  } ]
}

Request fields

필드명 타입 필수값 설명 제약사항

nodes

Array

true

블록 노드 리스트

nodes[].content

String

true

노드 내용

nodes[].style

Object

true

노드 스타일

nodes[].style.key

String

true

스타일 키

블록 순서 변경

HTTP request

PATCH /blocks/order HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiZTlhZmM4ZjYtYjMwZi00NjYyLTkzOTctNDFkMzkyZTJkMGY3IiwiZXhwIjoxNzQ2NTEzOTExfQ.AGrCzQlnUqJ6KUUOdiOefMBt7NexJJe6iaZYqdHuTf_uIDL5lG2CL_ReVDIV-rRk
Content-Length: 113
Host: localhost:8080

{
  "noteId" : "565428a6-0733-495b-9699-286ffac0fbb4",
  "startOrder" : 1,
  "endOrder" : 2,
  "upperOrder" : 3
}

Request fields

필드명 타입 필수값 설명 제약사항

noteId

String

true

문서 ID

startOrder

Number

true

시작 순서

endOrder

Number

true

끝 순서

upperOrder

Number

true

상위 순서

블록 타입 변경

HTTP request

PATCH /blocks/f99f5020-b9f6-47b4-931c-43acb26061f8/type HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiYzk0OTAwMWQtZjhiYi00ODg4LWE4NjYtZTZhYjIyZGI0NjZiIiwiZXhwIjoxNzQ2NTEzOTExfQ.ZCb8jKTrau0cydQPjnVQBjyFmEeZc-Otf9xInLu-2nCywTuVKP_EuVz-yD65FIMP
Content-Length: 24
Host: localhost:8080

{
  "type" : "DEFAULT"
}

Request fields

필드명 타입 필수값 설명 제약사항

type

String

true

블록 타입

범위 기반 블록 삭제

HTTP request

DELETE /blocks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiNjhhMGIwZDgtNTQyNS00NmJlLWExOTktODRkOWM0OTAzMDcwIiwiZXhwIjoxNzQ2NTEzOTExfQ.M-lC5uQcIfH71pwBqhYv_REdYthSdL4u2b0O_Auj22E8fKNw4IoaFoVICmm9ywVl
Content-Length: 93
Host: localhost:8080

{
  "noteId" : "6d63ac6f-9d49-48cb-895c-f50d9f125ee2",
  "startOrder" : 1,
  "endOrder" : 2
}

Request fields

필드명 타입 필수값 설명 제약사항

noteId

String

true

문서 ID

startOrder

Number

true

시작 순서

endOrder

Number

true

끝 순서

노드 API

노드 생성

HTTP request

POST /nodes HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiZmRhNjgzZmItMTRjNC00MzcyLWE1MDgtZmY0NzRhMjIwNTcyIiwiZXhwIjoxNzQ2NTEzOTExfQ.AiNJLpPDeb8f1KOiDrFxTzA9toBPTo2dpDCArSBsfF6rwzp-2gCavrLqI5ZvKphG
Content-Length: 188
Host: localhost:8080

{
  "blockId" : "e758cac4-326f-4669-aaf8-abf70d073dfb",
  "noteId" : "b1583fc5-eb60-439d-beae-6d8eed6a8efa",
  "content" : "content",
  "order" : 1,
  "style" : {
    "key" : "value"
  }
}

Request fields

필드명 타입 필수값 설명 제약사항

blockId

String

true

블록 ID

noteId

String

true

문서 ID

content

String

true

내용

order

Number

true

순서

style

Object

true

스타일

style.key

String

true

스타일 키

노드 내용 수정

HTTP request

PATCH /nodes/5f4d9c74-986e-45bb-bd33-c831ebfe0cef/content HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiYjRmYmFkNDktOWQ2Ny00YTIxLTgzYmEtZGI3Njg3YzQ3MTUwIiwiZXhwIjoxNzQ2NTEzOTExfQ.4pLF2-RsIb6WoygynOgMoIP8EOLTAAbzTY0j2O0Ca_bh1LkczIVCAKHALIybam0X
Content-Length: 27
Host: localhost:8080

{
  "content" : "content"
}

Request fields

필드명 타입 필수값 설명 제약사항

content

String

true

내용

노드 스타일 수정

HTTP request

PATCH /nodes/94244fe5-1789-4953-ad9f-decd938e538c/style HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJtZXRybyIsImlhdCI6MTc0NTkwOTExMSwic3ViIjoiNWNiNmMyMDktZmQ0Mi00ZDVkLTk4MjctYTE3YzgzNzY5MjhjIiwiZXhwIjoxNzQ2NTEzOTExfQ.kcQsqW4nJwmbHUYHoKKs7Bk26616NsDWuNQJyUZiD2Uqc_-Vwf7vErT-yJEcrI3n
Content-Length: 41
Host: localhost:8080

{
  "style" : {
    "key" : "value"
  }
}

Request fields

필드명 타입 필수값 설명 제약사항

style

Object

true

스타일

style.key

String

true

스타일 키

에러 코드

Error code

코드 코드명

A001

토큰이 만료되었습니다.

A002

유효하지 않은 토큰입니다.

A003

권한이 없습니다.

A004

토큰이 없습니다.

A005

OAuth 토큰을 가져오는데 실패했습니다.

A006

OAuth 프로필을 가져오는데 실패했습니다.

M001

인자는 null일 수 없습니다.

M002

이메일 형식이 올바르지 않습니다.

M003

사용자를 찾을 수 없습니다.

B001

블록의 순서는 0보다 작을 수 없습니다.

B002

블록의 문서 ID는 필수입니다.

B003

블록의 ID는 필수입니다.

B004

스타일 정보를 변환하는데 실패했습니다.

B005

멤버 ID는 필수입니다.

B006

노드가 존재하지 않습니다.

B007

해당 권한이 없습니다.

B008

해당 노드을 문자열로 변경할 수 없습니다.

B009

해당 문자열을 노드로 변경할 수 없습니다.

B010

블록을 찾을 수 없습니다.

D001

해당 인자는 null일 수 없습니다

D002

해당 문서를 찾을 수 없습니다

D003

해당 문서에 대한 권한이 없습니다

D004

해당 문서 필드 타입이 올바르지 않습니다

D005

해당 태그 목록을 문자열로 변경할 수 없습니다

D006

해당 문자열을 태그 목록으로 변경할 수 없습니다

G001

요청 파라미터가 잘못되었습니다.

G002

요청이 너무 많습니다.

G003

지원하지 않는 미디어 타입입니다.

G004

서버 내부 오류가 발생했습니다.