Skip to content

BookChatAPI

geneaky edited this page Nov 10, 2024 · 72 revisions
BookChat API Documentation

BookChat API Documentation

Table of Contents

공통 HTTTP Status Code

Status Code

Common Mean

Usage

200

Success

요청 정상 처리

400

Bad Request

요청이 부적절한 경우

401

UnAuthorized

인증되지 않은 사용자

403

Forbidden

권한이 없거나 차단된 사용자

404

NotFound

조회결과가 없는 경우

토큰

엑세스 토큰 재발급

Request

Field

Type

Optional

Description

refreshToken

String

false

리프레쉬 토큰

POST /v1/api/auth/token HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 419
Host: bookchat.link

{"refreshToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJCb29rQ2hhdCIsImRlZmF1bHRQcm9maWxlSW1hZ2VUeXBlIjoxLCJwcm92aWRlciI6Imtha2FvIiwidXNlck5pY2tuYW1lIjoidGVzdFVzZXJOaWNrbmFtZSIsInVzZXJOYW1lIjoidGVzdFVzZXIiLCJ1c2VyUHJvZmlsZUltYWdlVXJpIjoic29tZXRoaW5nSW1hZ2VVcmxAbmF2ZXIuY29tIiwidXNlclJvbGUiOiJST0xFX1VTRVIiLCJleHAiOjE3MzI0MzkzMTAsInVzZXJJZCI6IjEiLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.r-fR4k2o954Dp_-a-BEPnXUr2dJ7L0HeAULfOhSVkpI"}

Response

Path Type Description

accessToken

String

엑세스 토큰

refreshToken

String

리프레쉬 토큰

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 836

{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJCb29rQ2hhdCIsImRlZmF1bHRQcm9maWxlSW1hZ2VUeXBlIjoxLCJwcm92aWRlciI6Imtha2FvIiwidXNlck5pY2tuYW1lIjoidGVzdFVzZXJOaWNrbmFtZSIsInVzZXJOYW1lIjoidGVzdFVzZXIiLCJ1c2VyUHJvZmlsZUltYWdlVXJpIjoic29tZXRoaW5nSW1hZ2VVcmxAbmF2ZXIuY29tIiwidXNlclJvbGUiOiJST0xFX1VTRVIiLCJleHAiOjE3MzEyMzExMTAsInVzZXJJZCI6IjEiLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.xpbY-OZmXmvXDsZvnAi0HNN-p6tZ1ejLGHZI29ZCT6w","refreshToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJCb29rQ2hhdCIsImRlZmF1bHRQcm9maWxlSW1hZ2VUeXBlIjoxLCJwcm92aWRlciI6Imtha2FvIiwidXNlck5pY2tuYW1lIjoidGVzdFVzZXJOaWNrbmFtZSIsInVzZXJOYW1lIjoidGVzdFVzZXIiLCJ1c2VyUHJvZmlsZUltYWdlVXJpIjoic29tZXRoaW5nSW1hZ2VVcmxAbmF2ZXIuY29tIiwidXNlclJvbGUiOiJST0xFX1VTRVIiLCJleHAiOjE3MzI0MzkzMTAsInVzZXJJZCI6IjEiLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.r-fR4k2o954Dp_-a-BEPnXUr2dJ7L0HeAULfOhSVkpI"}

사용자

사용자 기본 프로필 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

GET /v1/api/users/profile HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

userId

Number

사용자 ID

userNickname

String

닉네임

userProfileImageUri

String

프로필 사진 URI

defaultProfileImageType

Number

기본 이미지 타입

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 126

{"userId":1,"userNickname":"testUserNickname","userProfileImageUri":"somethingImageUrl@naver.com","defaultProfileImageType":1}

사용자 닉네임 중복 체크

Request

Parameter

Optional

Description

nickname

false

사용자 nickname

GET /v1/api/users/profile/nickname?nickname=HiBs HTTP/1.1
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

Error Response

HTTP/1.1 409 Conflict
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

사용자 프로필 변경

Request Header

Name Description

Authorization

Bearer [JWT token]

Requset

Part Optional Description

changeUserNicknameRequest

false

변경할 닉네임

userProfileImage

true

프로필 이미지 [200 x 200].webp

changeUserNicknameRequest

Path Type Optional Description

nickname

String

false

변경할 닉네임

isProfileChanged

Boolean

false

프로필 이미지 변경 여부

POST /v1/api/users/profile HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=userProfileImage

test
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=changeUserNicknameRequest
Content-Type: application/json

{"nickname":"newNickname","isProfileChanged":true}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

사용자 회원가입

Request Header

Name Description

OIDC

Bearer [openid token]

Request

Part Optional Description

userSignUpRequest

false

회원가입 입력 폼

userProfileImage

true

프로필 이미지 [200 x 200].webp

userSignUpRequest

Path Type Optional Description

nickname

String

false

닉네임

defaultProfileImageType

Number

true

기본 이미지 타입

readingTastes

Array

true

독서 취향

oauth2Provider

String

false

프로바이더 타입[kakao/google]

POST /v1/api/users/signup HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
OIDC: Bearer eyJraWQiOiJhYmNlZGYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoiaHR0cHM6Ly9rYXV0aC5rYWthby5jb20iLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.YHqXp3Noznet_pP-Umt3o4ifp81O052ELvst2DmbxN7soeHLCsDWnI79xxpstUhKfUZ1XGyqey8wyllu9fJJZpHyyHX1qBjRFtrJ0Ghj_4E6m8W_YB1b4Hwv0QlXNqxigPcT1p9xnr5XvoxarpslAyvl_IUNZKO6u4zQ7iFjCiV-4GCRB082ZktoIx4P8YZw3WqnGi2V3buSmWoG-evEQQbWQBJ6C9Y-vEyA2aCCSU-Vl2A3aN5-fbE_h2OiKXdm44nDye8GWak2r9pg84ufvB-pUMAP5PdkYNIvNMmVt0PDkww2uSNahz7odig83xSU8g-3FofxsNcmDPRkug88_w
Host: bookchat.link

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=userProfileImage

test
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=userSignUpRequest
Content-Type: application/json

{"nickname":"nick","defaultProfileImageType":1,"readingTastes":["개발","예술","과학"],"oauth2Provider":"kakao"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

Error Response

요청 오류(Authorization Header 없을 시)

POST /v1/api/users/signup HTTP/1.1
Authorization:
Host: bookchat.link
Content-Type: application/x-www-form-urlencoded

nickname=nick&userEmail=kaktus418%40gmail.com&oauth2Provider=kakao&defaultProfileImageType=2
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

요청 오류(Authorization Header에 빈 토큰으로 요청시)

POST /v1/api/users/signup HTTP/1.1
Authorization: Bearer
Host: bookchat.link
Content-Type: application/x-www-form-urlencoded

nickname=nick&defaultProfileImageType=2
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

요청 오류(Authorization Bearer 양식에 맞지 않을 때)

POST /v1/api/users/signup HTTP/1.1
Authorization: TearereyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0In0.ljsVdbOiejW1sUMDrUm_GS18V77pD_vpcVGpNA7SKQzVJHwaqX5tw6LUu7zHNfRJ63MczAUnvoVHCKZ_2gkMWdOPKyRNiyTC1X_7Sqe9_84neqJX-m9Pq1aj4yNtoZMIgxLCsDP7A9H80LmeQ0c6PQr2qZVIbZ7sVr9lCN9J5IBmuEK9mSrvBWCAY_rO6iVelhgqs5bpyQHnt12namP_4xCBXcz_gZSLfxrSD25Pzt1k0XqZaqpRCLK4GZg7xDd346xh80mEigo2O6kyAnFFk1HB1MV4zRJzJRd-tvUiwBnetXz-1Uc-KDpDSzxk9S0PFnuh_0lpL-EI7ERBtKKQLA
Host: bookchat.link
Content-Type: application/x-www-form-urlencoded

defaultProfileImageType=1&nickname=testName
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

만료된 토큰

POST /v1/api/users/signup HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
OIDC: Bearer eyJraWQiOiJhYmNkZWZnIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2thdXRoLmtha2FvLmNvbSIsInN1YiI6InRlc3QiLCJleHAiOjB9.LZCwNer7fEt6pRnsRWAHPoLO6Hqb3XQyhOYUsJoWXUGGg8z48H474eACTgKVaRG6RrVu-bvm2tQ-BwAf81WQQsgU87xN4T4cz0lzRti4hMeM-G-yollDhDsFr39gg1ikpUzHzku4UsS_MMKy087pmVg7NhWvFyrdj1rDyoBBVXGSRo54rP7ACG9ZHtlvwO99Ts7xw3aVTqPIadQx0B15oIBP1-scQlghGJlssDwmWXSnflPE5tgboQQYi2gB3-kKjuX1zJ6ksv76F4pCIvBSYpv-jA5Pn49u0GSbj-OGSDo8_MC1uOcZ1gEDNI41-CcRQt3qJDqEYtWDJ7Jfv7Z_Wg
Host: bookchat.link

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=userProfileImage

testImage
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=userSignUpRequest
Content-Type: application/json

{"nickname":"nick","defaultProfileImageType":1,"readingTastes":["개발","예술","과학"],"oauth2Provider":"kakao"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP/1.1 401 Unauthorized
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 62

{"errorCode":"4010001","message":"만료된 토큰입니다."}

올바르지 않은 요청 파라미터

POST /v1/api/users/signup HTTP/1.1
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0In0.ljsVdbOiejW1sUMDrUm_GS18V77pD_vpcVGpNA7SKQzVJHwaqX5tw6LUu7zHNfRJ63MczAUnvoVHCKZ_2gkMWdOPKyRNiyTC1X_7Sqe9_84neqJX-m9Pq1aj4yNtoZMIgxLCsDP7A9H80LmeQ0c6PQr2qZVIbZ7sVr9lCN9J5IBmuEK9mSrvBWCAY_rO6iVelhgqs5bpyQHnt12namP_4xCBXcz_gZSLfxrSD25Pzt1k0XqZaqpRCLK4GZg7xDd346xh80mEigo2O6kyAnFFk1HB1MV4zRJzJRd-tvUiwBnetXz-1Uc-KDpDSzxk9S0PFnuh_0lpL-EI7ERBtKKQLA
Host: bookchat.link
Content-Type: application/x-www-form-urlencoded

nickname=&userEmail=abcdefg&oauth2Provider=
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

사용자 로그인

Request Header

Name Description

OIDC

Bearer [openid token]

Request

Field

Type

Optional

Description

oauth2Provider

String

false

프로바이더 타입[kakao/google]

fcmToken

String

false

FCM Token

deviceToken

String

false

Unique Device Id

approveChangingDevice

Boolean

true

기기 변경 승인

POST /v1/api/users/signin HTTP/1.1
Content-Type: application/json;charset=UTF-8
OIDC: Bearer eyJraWQiOiJhYmNlZGYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoiaHR0cHM6Ly9rYXV0aC5rYWthby5jb20iLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.YHqXp3Noznet_pP-Umt3o4ifp81O052ELvst2DmbxN7soeHLCsDWnI79xxpstUhKfUZ1XGyqey8wyllu9fJJZpHyyHX1qBjRFtrJ0Ghj_4E6m8W_YB1b4Hwv0QlXNqxigPcT1p9xnr5XvoxarpslAyvl_IUNZKO6u4zQ7iFjCiV-4GCRB082ZktoIx4P8YZw3WqnGi2V3buSmWoG-evEQQbWQBJ6C9Y-vEyA2aCCSU-Vl2A3aN5-fbE_h2OiKXdm44nDye8GWak2r9pg84ufvB-pUMAP5PdkYNIvNMmVt0PDkww2uSNahz7odig83xSU8g-3FofxsNcmDPRkug88_w
Content-Length: 101
Host: bookchat.link

{"fcmToken":"5Nh2lN","deviceToken":"JI82uSMi","approveChangingDevice":false,"oauth2Provider":"kakao"}

Response

Path Type Description

accessToken

String

Access Token

refreshToken

String

Refresh Token

Error Response

요청 오류(Authorization Header 없을 시)

POST /v1/api/users/signup HTTP/1.1
Authorization:
Host: bookchat.link
Content-Type: application/x-www-form-urlencoded

nickname=nick&userEmail=kaktus418%40gmail.com&oauth2Provider=kakao&defaultProfileImageType=2
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

요청 오류(Authorization Header에 빈 토큰으로 요청시)

POST /v1/api/users/signin HTTP/1.1
OIDC: Bearer
Host: bookchat.link
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

요청 오류(Authorization Bearer 양식에 맞지 않을 때)

POST /v1/api/users/signin HTTP/1.1
OIDC: Tearer eyJraWQiOiJhYmNlZGYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoiaHR0cHM6Ly9rYXV0aC5rYWthby5jb20iLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIn0.YHqXp3Noznet_pP-Umt3o4ifp81O052ELvst2DmbxN7soeHLCsDWnI79xxpstUhKfUZ1XGyqey8wyllu9fJJZpHyyHX1qBjRFtrJ0Ghj_4E6m8W_YB1b4Hwv0QlXNqxigPcT1p9xnr5XvoxarpslAyvl_IUNZKO6u4zQ7iFjCiV-4GCRB082ZktoIx4P8YZw3WqnGi2V3buSmWoG-evEQQbWQBJ6C9Y-vEyA2aCCSU-Vl2A3aN5-fbE_h2OiKXdm44nDye8GWak2r9pg84ufvB-pUMAP5PdkYNIvNMmVt0PDkww2uSNahz7odig83xSU8g-3FofxsNcmDPRkug88_w
Host: bookchat.link
HTTP/1.1 400 Bad Request
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 78

{"errorCode":"500","message":"예상치 못한 예외가 발생했습니다."}

만료된 토큰

POST /v1/api/users/signin HTTP/1.1
Content-Type: application/json;charset=UTF-8
OIDC: Bearer eyJraWQiOiJhYmNkZWZnIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2thdXRoLmtha2FvLmNvbSIsInN1YiI6InRlc3QiLCJleHAiOjB9.LZCwNer7fEt6pRnsRWAHPoLO6Hqb3XQyhOYUsJoWXUGGg8z48H474eACTgKVaRG6RrVu-bvm2tQ-BwAf81WQQsgU87xN4T4cz0lzRti4hMeM-G-yollDhDsFr39gg1ikpUzHzku4UsS_MMKy087pmVg7NhWvFyrdj1rDyoBBVXGSRo54rP7ACG9ZHtlvwO99Ts7xw3aVTqPIadQx0B15oIBP1-scQlghGJlssDwmWXSnflPE5tgboQQYi2gB3-kKjuX1zJ6ksv76F4pCIvBSYpv-jA5Pn49u0GSbj-OGSDo8_MC1uOcZ1gEDNI41-CcRQt3qJDqEYtWDJ7Jfv7Z_Wg
Content-Length: 95
Host: bookchat.link

{"fcmToken":"jMYy","deviceToken":"40vB5","approveChangingDevice":null,"oauth2Provider":"kakao"}
HTTP/1.1 401 Unauthorized
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 62

{"errorCode":"4010001","message":"만료된 토큰입니다."}

사용자 로그아웃

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

POST /v1/api/users/logout HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

사용자 회원탈퇴

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

DELETE /v1/api/users HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

사용자 FCM 토큰 갱신

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

PUT /v1/api/devices/fcm-token HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 32
Host: bookchat.link

{"fcmToken":"changed fcm token"}

Field

Type

Optional

Description

fcmToken

String

false

FCM Token

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

회원

회원 정보 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

memberId

false

회원 ID

GET /v1/api/members?memberId=1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

userId

Number

사용자 ID

userNickname

String

닉네임

userProfileImageUri

String

프로필 사진 URI

defaultProfileImageType

Number

기본 이미지 타입

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 91

{"userId":1,"userNickname":"test","userProfileImageUri":"test","defaultProfileImageType":1}

도서

도서 검색

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

query

false

검색 키워드 [ISBN, 도서명, 저자명]

size

false

한 번에 조회할 책의 수 - page 당 size

page

false

한 번에 조회할 page 수

sort

false

조회시 정렬 옵션

GET /v1/api/books?query=1231513&size=5&page=1&sort=ACCURACY HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Resopnse

Path Type Description

bookResponses[].isbn

String

ISBN

bookResponses[].title

String

제목

bookResponses[].publishAt

String

출간일

bookResponses[].authors[]

Array

저자

bookResponses[].publisher

String

출판사

bookResponses[].bookCoverImageUrl

String

책 표지 이미지

meta.is_end

Boolean

마지막 페이지 여부

meta.pageable_count

Number

가져온 페이지 수

meta.total_count

Number

총 페이지 수

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 234

{"bookResponses":[{"isbn":"213123","title":"effectiveJava","publishAt":"2014-11-17","authors":["Joshua"],"publisher":"testPublisher","bookCoverImageUrl":"bookCoverImageUrl"}],"meta":{"is_end":false,"pageable_count":5,"total_count":5}}

책장

도서 단 건 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 1. /v1/api/bookshelves/{bookShelfId}
Parameter Description

bookShelfId

BookShelf Id

GET /v1/api/bookshelves/234 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

bookShelfId

Number

BookShelf Id

title

String

제목

isbn

String

ISBN

bookCoverImageUrl

String

책 커버 이미지 URI

authors[]

Array

저자

publisher

String

출판사

publishAt

String

출판일자

lastUpdatedAt

String

서재 수정 일자

pages

Number

현재 읽고 있는 페이지 번호

star

String

평점

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 246

{"bookShelfId":12,"title":"effectiveJava","isbn":"124151214","bookCoverImageUrl":"bookCoverImage.com","publishAt":"2024-11-10","authors":["Joshua"],"publisher":"oreilly","star":"FOUR_HALF","pages":152,"lastUpdatedAt":"2024-11-10T17:59:23.005476"}

읽을 도서 등록

Request Header

Name Description

Authorization

Bearer [openid token]

Request

Field

Type

Optional

Description

bookRequest.isbn

String

false

ISBN

bookRequest.title

String

false

제목

bookRequest.authors[]

Array

false

저자

bookRequest.publisher

String

false

출판사

bookRequest.bookCoverImageUrl

String

true

책 커버 이미지 URI

bookRequest.publishAt

String

false

출판일

readingStatus

String

false

WISH

POST /v1/api/bookshelves HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 204
Host: bookchat.link

{"bookRequest":{"isbn":"124151214","title":"effectiveJava","authors":["Joshua"],"publisher":"oreilly","bookCoverImageUrl":"bookCoverImage.com","publishAt":"2024-11-10"},"readingStatus":"WISH","star":null}

Response

Name Description

Location

등록된 책 조회 URI

HTTP/1.1 201 Created
Location: /v1/api/bookshelves/456
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

읽고 있는 도서 등록

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Field

Type

Optional

Description

bookRequest.isbn

String

false

ISBN

bookRequest.title

String

false

제목

bookRequest.authors[]

Array

false

저자

bookRequest.publisher

String

false

출판사

bookRequest.bookCoverImageUrl

String

true

책 커버 이미지 URI

bookRequest.publishAt

String

false

출판일

readingStatus

String

false

READING

POST /v1/api/bookshelves HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 207
Host: bookchat.link

{"bookRequest":{"isbn":"124151214","title":"effectiveJava","authors":["Joshua"],"publisher":"oreilly","bookCoverImageUrl":"bookCoverImage.com","publishAt":"2024-11-10"},"readingStatus":"READING","star":null}

Response

Name Description

Location

등록된 책 조회 URI

HTTP/1.1 201 Created
Location: /v1/api/bookshelves/456
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

읽은 도서 등록

Reqeust Header

Name Description

Authorization

Bearer [JWT token]

Request

Field

Type

Optional

Description

bookRequest.isbn

String

false

ISBN

bookRequest.title

String

false

제목

bookRequest.authors[]

Array

false

저자

bookRequest.publisher

String

false

출판사

bookRequest.bookCoverImageUrl

String

true

책 커버 이미지 URI

bookRequest.publishAt

String

false

출판일

readingStatus

String

false

COMPLETE

star

String

false

평점

POST /v1/api/bookshelves HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 210
Host: bookchat.link

{"bookRequest":{"isbn":"124151214","title":"effectiveJava","authors":["Joshua"],"publisher":"oreilly","bookCoverImageUrl":"bookCoverImage.com","publishAt":"2024-11-10"},"readingStatus":"COMPLETE","star":"FOUR"}

Response

Name Description

Location

등록된 책 조회 URI

HTTP/1.1 201 Created
Location: /v1/api/bookshelves/456
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

읽을 도서 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

readingStatus

false

WISH

size

false

page 당 size

page

false

한번에 조회할 page수

sort

false

등록순-id | 변경순-updatedAt

GET /v1/api/bookshelves?readingStatus=WISH&size=5&page=1&sort=id,DESC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

contents[].bookShelfId

Number

BookShelf Id

contents[].title

String

제목

contents[].isbn

String

ISBN

contents[].bookCoverImageUrl

String

책 커버 이미지 URI

contents[].authors[]

Array

저자

contents[].publisher

String

출판사

contents[].publishAt

String

출판일자

contents[].lastUpdatedAt

String

서재 수정 일자

contents[].pages

Number

현재 읽고 있는 페이지 번호

contents[].star

String

평점

pageMeta.totalElements

Number

전체 ROW 수

pageMeta.totalPages

Number

총 페이지 수

pageMeta.pageSize

Number

요청한 페이지 사이즈

pageMeta.pageNumber

Number

현재 페이지 번호

pageMeta.offset

Number

ROW 시작 번호

pageMeta.first

Boolean

시작 페이지 여부

pageMeta.last

Boolean

마지막 페이지 여부

pageMeta.empty

Boolean

content 비어있는지 여부

{"pageMeta":{"totalElements":1,"totalPages":1,"pageSize":1,"pageNumber":0,"offset":0,"first":true,"last":true,"empty":false},"contents":[{"bookShelfId":1,"title":"effectiveJava","isbn":"12345","bookCoverImageUrl":"testBookCoverImageUrl","publishAt":"2024-11-10","authors":["joshua"],"publisher":"jpub","star":null,"pages":152,"lastUpdatedAt":"2024-11-10T17:59:22.795961"}]}

읽고 있는 도서 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

readingStatus

false

READING

size

false

page 당 size

page

false

한번에 조회할 page수

sort

false

등록순-id | 변경순-updatedAt

GET /v1/api/bookshelves?readingStatus=READING&size=5&page=1&sort=id,DESC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

contents[].bookShelfId

Number

BookShelf Id

contents[].title

String

제목

contents[].isbn

String

ISBN

contents[].bookCoverImageUrl

String

책 커버 이미지 URI

contents[].authors[]

Array

저자

contents[].publisher

String

출판사

contents[].publishAt

String

출판일자

contents[].lastUpdatedAt

String

서재 수정 일자

contents[].pages

Number

현재 읽고 있는 페이지 번호

contents[].star

String

평점

pageMeta.totalElements

Number

전체 ROW 수

pageMeta.totalPages

Number

총 페이지 수

pageMeta.pageSize

Number

요청한 페이지 사이즈

pageMeta.pageNumber

Number

현재 페이지 번호

pageMeta.offset

Number

ROW 시작 번호

pageMeta.first

Boolean

시작 페이지 여부

pageMeta.last

Boolean

마지막 페이지 여부

pageMeta.empty

Boolean

content 비어있는지 여부

{"pageMeta":{"totalElements":1,"totalPages":1,"pageSize":1,"pageNumber":0,"offset":0,"first":true,"last":true,"empty":false},"contents":[{"bookShelfId":1,"title":"effectiveJava","isbn":"12345","bookCoverImageUrl":"testBookCoverImageUrl","publishAt":"2024-11-10","authors":["joshua"],"publisher":"jpub","star":null,"pages":152,"lastUpdatedAt":"2024-11-10T17:59:22.862511"}]}

읽은 도서 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

readingStatus

false

COMPLETE

size

false

page 당 size

page

false

한번에 조회할 page수

sort

false

등록순-id | 변경순-updatedAt

GET /v1/api/bookshelves?readingStatus=COMPLETE&size=5&page=1&sort=id,DESC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

contents[].bookShelfId

Number

BookShelf Id

contents[].title

String

제목

contents[].isbn

String

ISBN

contents[].bookCoverImageUrl

String

책 커버 이미지 URI

contents[].authors[]

Array

저자

contents[].publisher

String

출판사

contents[].publishAt

String

출판일자

contents[].lastUpdatedAt

String

서재 수정 일자

contents[].pages

Number

현재 읽고 있는 페이지 번호

contents[].star

String

평점

pageMeta.totalElements

Number

전체 ROW 수

pageMeta.totalPages

Number

총 페이지 수

pageMeta.pageSize

Number

요청한 페이지 사이즈

pageMeta.pageNumber

Number

현재 페이지 번호

pageMeta.offset

Number

ROW 시작 번호

pageMeta.first

Boolean

시작 페이지 여부

pageMeta.last

Boolean

마지막 페이지 여부

pageMeta.empty

Boolean

content 비어있는지 여부

{"pageMeta":{"totalElements":1,"totalPages":1,"pageSize":1,"pageNumber":0,"offset":0,"first":true,"last":true,"empty":false},"contents":[{"bookShelfId":1,"title":"effectiveJava","isbn":"12345","bookCoverImageUrl":"testBookCoverImageUrl","publishAt":"2024-11-10","authors":["joshua"],"publisher":"jpub","star":"FOUR_HALF","pages":152,"lastUpdatedAt":"2024-11-10T17:59:22.575415"}]}

서재에 등록된 책 여부 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

isbn

false

ISBN 번호

publishAt

false

출판일

GET /v1/api/bookshelves/book?isbn=1234567891011+0123456789&publishAt=2024-11-10 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

bookShelfId

Number

책이 등록된 서재 ID

readingStatus

String

서재에 등록된 책의 현재 상태

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 40

{"bookShelfId":1,"readingStatus":"WISH"}

읽고 있는 도서 페이지번호 저장

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Field

Type

Optional

Description

pages

Number

true

현재 읽고 있는 페이지 번호

star

String

true

현재 책의 별점

readingStatus

String

false

현재 책의 독서상태

PUT /v1/api/bookshelves/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 51
Host: bookchat.link

{"pages":137,"star":null,"readingStatus":"READING"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

서재에 있는 도서 독서예정 → 독서중 상태 변경

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 2. /v1/api/bookshelves/{bookShelfId}
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

pages

Number

true

현재 읽고 있는 페이지 번호

star

String

true

현재 책의 별점

readingStatus

String

false

변경할 독서상태

PUT /v1/api/bookshelves/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 52
Host: bookchat.link

{"pages":null,"star":null,"readingStatus":"READING"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

서재에 있는 도서 독서중 → 독서완료 상태 변경

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 3. /v1/api/bookshelves/{bookShelfId}
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

pages

Null

true

현재 읽고 있는 페이지 번호

star

String

true

변경할 별점

readingStatus

String

false

변경할 독서상태

PUT /v1/api/bookshelves/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 60
Host: bookchat.link

{"pages":null,"star":"FOUR_HALF","readingStatus":"COMPLETE"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

독서완료 도서 별점 수정

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 4. /v1/api/bookshelves/{bookShelfId}
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

pages

Null

true

현재 읽고 있는 페이지 번호

star

String

true

변경할 별점

readingStatus

String

false

현재 책의 독서상태

PUT /v1/api/bookshelves/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 60
Host: bookchat.link

{"pages":null,"star":"FOUR_HALF","readingStatus":"COMPLETE"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

서재에서 도서 삭제

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 5. /v1/api/bookshelves/{bookShelfId}
Parameter Description

bookShelfId

BookShelf Id

DELETE /v1/api/bookshelves/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

독후감

독후감 등록

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 6. /v1/api/bookshelves/{bookShelfId}/report
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

title

String

false

독후감 제목

content

String

false

독후감 내용

POST /v1/api/bookshelves/1/report HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 112
Host: bookchat.link

{"title":"어렵지만 많이 배웠다","content":"요런 요런 내용, 저런저런 내용을 많이 배움"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

독후감 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 7. /v1/api/bookshelves/{bookShelfId}/report
Parameter Description

bookShelfId

BookShelf Id

GET /v1/api/bookshelves/1/report HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

reportTitle

String

독후감 제목

reportContent

String

독후감 내용

reportCreatedAt

String

독후감 작성 시간

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 116

{"reportTitle":"재미있네","reportContent":"다 읽은 후기 알려드립니다","reportCreatedAt":"2024-11-10"}

독후감 삭제

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 8. /v1/api/bookshelves/{bookShelfId}/report
Parameter Description

bookShelfId

BookShelf Id

DELETE /v1/api/bookshelves/1/report HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

독후감 수정

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 9. /v1/api/bookshelves/{bookShelfId}/report
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

title

String

false

독후감 제목

content

String

false

독후감 내용

PUT /v1/api/bookshelves/1/report HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 251
Host: bookchat.link

{"title":"제목 바꿔버리기","content":"내용은 바꿀수도 아닐수도 있기 때문에 이전 상태 값을 완전히 가지고있기 때문에 똑같이 보내주거나 바꿔서 보내주세요 put으로 멱등성을 보장해줍시다."}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

스크랩

스크랩 등록

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Field

Type

Optional

Description

bookShelfId

Number

false

서재 ID

scrapContent

String

false

스크랩 내용

POST /v1/api/scraps HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 54
Host: bookchat.link

{"bookShelfId":1,"scrapContent":"스크랩할 내용"}

Response

Name Description

Location

생성된 스크랩 URI

HTTP/1.1 201 Created
Location: /v1/api/scraps/0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

스크랩 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

bookShelfId

false

서재 Id

postCursorId

true

마지막 커서 ID

size

true

페이지 사이즈

GET /v1/api/scraps?bookShelfId=1&postCursorId=5&size=3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 264

{"scrapResponseList":[{"scrapId":1,"scrapContent":"content1"},{"scrapId":2,"scrapContent":"content2"},{"scrapId":3,"scrapContent":"content3"}],"cursorMeta":{"sliceSize":3,"contentSize":3,"hasContent":true,"hasNext":true,"nextCursorId":3,"first":true,"last":false}}

스크랩 단 건 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 10. /v1/api/scraps/{scrapId}
Parameter Description

scrapId

scrap id

GET /v1/api/scraps/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

scrapId

Number

scrap id

scrapContent

String

scrap content

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 39

{"scrapId":1,"scrapContent":"content1"}

스크랩 삭제

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

bookShelfId

false

서재 Id

Table 11. /v1/api/scraps/{scrapIds}
Parameter Description

scrapIds

scrap id

DELETE /v1/api/scraps/1,%202,%203?bookShelfId=1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민

고민 폴더 생성

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 12. /v1/api/bookshelves/{bookShelfId}/agonies
Parameter Description

bookShelfId

BookShelf Id

Field

Type

Optional

Description

title

String

false

고민 제목

hexColorCode

String

false

고민 폴더 색상

POST /v1/api/bookshelves/1/agonies HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 42
Host: bookchat.link

{"title":"title","hexColorCode":"#062498"}

Response

Name Description

Location

생성된 고민 폴더 URI

HTTP/1.1 201 Created
Location: /v1/api/bookshelves/1/agonies/0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민 폴더 단 건 조회 성공

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 13. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

GET /v1/api/bookshelves/1/agonies/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

agonyId

Number

고민 Id

title

String

고민 제목

hexColorCode

String

16진수 색상 코드

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 55

{"agonyId":1,"title":"고민1","hexColorCode":"빨강"}

고민 폴더 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 14. /v1/api/bookshelves/{bookShelfId}/agonies
Parameter Description

bookShelfId

BookShelf Id

Parameter

Optional

Description

size

false

page 당 size

sort

false

[최신순] - id,DESC | [등록순] - id,ASC

postCursorId

true

마지막 커서 ID

GET /v1/api/bookshelves/1/agonies?size=2&sort=id,DESC&postCursorId=1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

agonyResponseList[].agonyId

Number

고민 Id

agonyResponseList[].title

String

고민 제목

agonyResponseList[].hexColorCode

String

16진수 색상 코드

cursorMeta.sliceSize

Number

현재 슬라이스 크기

cursorMeta.contentSize

Number

현재 슬라이스에 담긴 내용물 크기

cursorMeta.hasContent

Boolean

현재 슬라이스 내용물 유/무

cursorMeta.hasNext

Boolean

다음 슬라이스 유무

cursorMeta.last

Boolean

마지막 슬라이스 여부

cursorMeta.first

Boolean

처음 슬라이스 여부

cursorMeta.nextCursorId

Varies

다음 커서 ID

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 256

{"agonyResponseList":[{"agonyId":1,"title":"고민1","hexColorCode":"빨강"},{"agonyId":2,"title":"고민2","hexColorCode":"파랑"}],"cursorMeta":{"sliceSize":2,"contentSize":2,"hasContent":true,"hasNext":true,"nextCursorId":2,"first":true,"last":false}}

고민 폴더 삭제

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 15. /v1/api/bookshelves/{bookShelfId}/agonies/{agoniesIds}
Parameter Description

bookShelfId

BookShelf Id

agoniesIds

삭제할 고민폴더 ID

DELETE /v1/api/bookshelves/1/agonies/1,2,3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민 폴더 수정

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 16. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

Field

Type

Optional

Description

title

String

false

고민 폴더 이름

hexColorCode

String

false

고민 폴더 색

PUT /v1/api/bookshelves/1/agonies/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 55
Host: bookchat.link

{"title":"고민 바꾸기","hexColorCode":"보라색"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민기록

고민 기록 생성

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 17. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}/records
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

Field

Type

Optional

Description

title

String

false

고민기록의 제목

content

String

true

고민기록의 내용

POST /v1/api/bookshelves/1/agonies/1/records HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 36
Host: bookchat.link

{"title":"title","content":"blabla"}

Response

Name Description

Location

생성된 고민기록의 URI

HTTP/1.1 201 Created
Location: /v1/api/bookshelves/1/agonies/1/records/0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민 기록 단 건 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 18. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}/records/{recordId}
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

recordId

Record Id

GET /v1/api/bookshelves/1/agonies/1/records/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

agonyRecordId

Number

고민 기록 Id

agonyRecordTitle

String

고민 기록 제목

agonyRecordContent

String

고민 기록 내용

createdAt

String

고민 기록 생성 시간

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 102

{"agonyRecordId":1,"agonyRecordTitle":"title","agonyRecordContent":"content","createdAt":"2024-11-10"}

고민 기록 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 19. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}/records
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

Parameter

Optional

Description

postCursorId

true

마지막 커서 ID

size

false

page당 size

sort

false

[최신순] - id,DESC | [등록순] - id,ASC

GET /v1/api/bookshelves/1/agonies/1/records?postCursorId=1&size=2&sort=id,ASC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

agonyRecordResponseList[].agonyRecordId

Number

고민 기록 Id

agonyRecordResponseList[].agonyRecordTitle

String

고민 기록 제목

agonyRecordResponseList[].agonyRecordContent

String

고민 기록 내용

agonyRecordResponseList[].createdAt

String

고민 가장 최근 수정시간

cursorMeta.sliceSize

Number

현재 슬라이스 크기

cursorMeta.contentSize

Number

현재 슬라이스에 담긴 내용물 크기

cursorMeta.hasContent

Boolean

현재 슬라이스 내용물 유/무

cursorMeta.hasNext

Boolean

다음 슬라이스 유무

cursorMeta.last

Boolean

마지막 슬라이스 여부

cursorMeta.first

Boolean

처음 슬라이스 여부

cursorMeta.nextCursorId

Varies

다음 커서 ID

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 360

{"agonyRecordResponseList":[{"agonyRecordId":2,"agonyRecordTitle":"title1","agonyRecordContent":"content1","createdAt":"2024-11-10"},{"agonyRecordId":3,"agonyRecordTitle":"title2","agonyRecordContent":"content2","createdAt":"2024-11-10"}],"cursorMeta":{"sliceSize":2,"contentSize":2,"hasContent":true,"hasNext":false,"nextCursorId":3,"first":true,"last":true}}

고민 기록 삭제

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 20. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}/records/{recordId}
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

recordId

Record Id

DELETE /v1/api/bookshelves/1/agonies/1/records/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

고민 기록 수정

Reqeust Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 21. /v1/api/bookshelves/{bookShelfId}/agonies/{agonyId}/records/{recordId}
Parameter Description

bookShelfId

BookShelf Id

agonyId

Agony Id

recordId

Record Id

Field

Type

Optional

Description

recordTitle

String

false

고민 기록 제목

recordContent

String

false

고민 기록 내용

PUT /v1/api/bookshelves/1/agonies/1/records/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Content-Length: 97
Host: bookchat.link

{"recordTitle":"수정된 고민 기록 제목","recordContent":"수정된 고민 기록 내용"}

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

채팅방

채팅방 생성

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Part Optional Description

createChatRoomRequest

false

채팅방 생성 폼

chatRoomImage

true

채팅방 이미지 [200x200].webp

createChatRoomRequest

Path Type Optional Description

roomName

String

false

채팅 방 이름

roomSize

Number

false

채팅 방 인원 수

defaultRoomImageType

Number

false

기본 이미지 타입 번호

hashTags

Array

true

해시 태그

bookRequest.isbn

String

false

ISBN 번호

bookRequest.title

String

false

책 제목

bookRequest.publisher

String

false

출판사

bookRequest.bookCoverImageUrl

String

false

책 표지 이미지 url

bookRequest.authors

Array

false

저자 목록

bookRequest.publishAt

String

false

출판일

POST /v1/api/chatrooms HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=chatRoomImage
Content-Type: image/webp

test
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=createChatRoomRequest
Content-Type: application/json

{"roomName":"effective java 부수는 방","roomSize":5,"defaultRoomImageType":1,"hashTags":["Java","스터디"],"bookRequest":{"isbn":"124151214","title":"effective java","authors":["joshua"],"publisher":"insight","bookCoverImageUrl":"testImageUrl","publishAt":"2024-11-10"}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response Header

Name Description

Location

채팅방 접속 Connection Url

Resposne

HTTP/1.1 201 Created
Location: /v1/api/chatrooms/1
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

채팅방 정보 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 22. /v1/api/chatrooms/{roomId}
Parameter Description

roomId

Room Id

GET /v1/api/chatrooms/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

roomSize

Number

채팅방 인원수

roomTags

Array

채팅방 태그

roomName

String

채팅방 이름

bookTitle

String

책 제목

bookCoverImageUrl

String

책 커버 이미지 url

bookAuthors

Array

책 저자

roomHost.id

Number

방장 Id

roomHost.nickname

String

방장 닉네임

roomHost.profileImageUrl

String

방장 프로필 이미지 url

roomHost.defaultProfileImageType

Number

방장 기본 프로필 이미지 타입

roomSubHostList[].id

Number

부방장 Id

roomSubHostList[].nickname

String

부방장 닉네임

roomSubHostList[].profileImageUrl

String

부방장 프로필 이미지 url

roomSubHostList[].defaultProfileImageType

Number

부방장 기본 프로필 이미지 타입

roomGuestList[].id

Number

참여자 Id

roomGuestList[].nickname

String

참여자 닉네임

roomGuestList[].profileImageUrl

String

참여자 프로필 이미지 url

roomGuestList[].defaultProfileImageType

Number

참여자 기본 프로필 이미지 타입

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 683

{"roomSize":100,"roomTags":["개발","DB"],"roomName":"test room name","bookTitle":"RealMySQL","bookCoverImageUrl":"realmysql@s3.com","bookAuthors":["author1","author2"],"roomHost":{"id":1,"nickname":"마스터","profileImageUrl":"test@s3.com","defaultProfileImageType":1},"roomSubHostList":[{"id":2,"nickname":"서브 마스터1","profileImageUrl":null,"defaultProfileImageType":2},{"id":3,"nickname":"서브 마스터2","profileImageUrl":"subHost@s3.com","defaultProfileImageType":3}],"roomGuestList":[{"id":4,"nickname":"게스트1","profileImageUrl":null,"defaultProfileImageType":4},{"id":5,"nickname":"게스트2","profileImageUrl":"guest@s3.com","defaultProfileImageType":1}]}

사용자 채팅방 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

bookId

true

책 ID

postCursorId

true

마지막 커서 ID

size

true

페이지 사이즈

GET /v1/api/users/chatrooms?bookId=1&postCursorId=0&size=3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

userChatRoomResponseList[].roomId

Number

채팅방 ID

userChatRoomResponseList[].roomName

String

채팅방 이름

userChatRoomResponseList[].roomSid

String

채팅방 SID

userChatRoomResponseList[].roomMemberCount

Number

채팅방 현재 인원수

userChatRoomResponseList[].defaultRoomImageType

Number

기본 이미지 타입 번호

userChatRoomResponseList[].roomImageUri

String

채팅방 이미지 URI

userChatRoomResponseList[].hostId

Number

방장 ID

userChatRoomResponseList[].hostNickname

String

방장 닉네임

userChatRoomResponseList[].hostProfileImageUrl

String

방장 프로필 이미지

userChatRoomResponseList[].hostDefaultProfileImageType

Number

방장 기본 프로필 이미지 타입

userChatRoomResponseList[].bookTitle

String

책 제목

userChatRoomResponseList[].bookCoverImageUrl

String

책 커버 이미지

userChatRoomResponseList[].bookAuthors[]

Array

책 저자

userChatRoomResponseList[].senderId

Number

마지막 채팅 보낸 사람 ID

userChatRoomResponseList[].senderNickname

String

마지막 채팅 보낸 사람 닉네임

userChatRoomResponseList[].senderProfileImageUrl

String

마지막 채팅 보낸 사람 프로필 이미지

userChatRoomResponseList[].senderDefaultProfileImageType

Number

마지막 채팅 보낸 사람 기본 프로필 이미지 타입

userChatRoomResponseList[].lastChatId

Number

마지막 채팅 ID

userChatRoomResponseList[].lastChatContent

String

마지막 채팅 내용

userChatRoomResponseList[].lastChatDispatchTime

String

마지막 채팅 발송 시간

cursorMeta.sliceSize

Number

현재 슬라이스 크기

cursorMeta.contentSize

Number

현재 슬라이스에 담긴 내용물 크기

cursorMeta.hasContent

Boolean

현재 슬라이스 내용물 유/무

cursorMeta.hasNext

Boolean

다음 슬라이스 유무

cursorMeta.last

Boolean

마지막 슬라이스 여부

cursorMeta.first

Boolean

처음 슬라이스 여부

cursorMeta.nextCursorId

Varies

다음 커서 ID

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 2047

{"userChatRoomResponseList":[{"roomId":1,"roomName":"이펙티브 자바 부수는 방","roomSid":"secret1","roomMemberCount":2,"defaultRoomImageType":1,"roomImageUri":null,"hostId":1,"hostNickname":"host 별명","hostProfileImageUrl":"host Profile Image Url","hostDefaultProfileImageType":1,"bookTitle":"effective java","bookCoverImageUrl":"effectivejava@s3.com","bookAuthors":["Joshua","JJU"],"senderId":1,"senderNickname":"sender Nickname","senderProfileImageUrl":"sender Profile Image Url","senderDefaultProfileImageType":3,"lastChatId":1,"lastChatContent":"이펙티브 자바 부수는 방 입니다.","lastChatDispatchTime":"2024-11-10T18:01:46.515077"},{"roomId":2,"roomName":"이펙티브 코틀린 부수는 방","roomSid":"secret2","roomMemberCount":2,"defaultRoomImageType":1,"roomImageUri":null,"hostId":1,"hostNickname":"host 별명","hostProfileImageUrl":"host Profile Image Url","hostDefaultProfileImageType":1,"bookTitle":"effective kotlin","bookCoverImageUrl":"effectivekotlin@s3.com","bookAuthors":["marcin mosckala"],"senderId":1,"senderNickname":"sender Nickname","senderProfileImageUrl":"sender Profile Image Url","senderDefaultProfileImageType":3,"lastChatId":2,"lastChatContent":"이펙티브 코틀린 부수는 방 입니다.","lastChatDispatchTime":"2024-11-10T18:01:46.515103"},{"roomId":3,"roomName":"토비의 스프링 부수는 방","roomSid":"secret3","roomMemberCount":2,"defaultRoomImageType":1,"roomImageUri":null,"hostId":1,"hostNickname":"host 별명","hostProfileImageUrl":"host Profile Image Url","hostDefaultProfileImageType":1,"bookTitle":"toby spring","bookCoverImageUrl":"tobyspring@s3.com","bookAuthors":["21min"],"senderId":1,"senderNickname":"sender Nickname","senderProfileImageUrl":"sender Profile Image Url","senderDefaultProfileImageType":3,"lastChatId":3,"lastChatContent":"토비의 스프링 부수는 방 입니다.","lastChatDispatchTime":"2024-11-10T18:01:46.515111"}],"cursorMeta":{"sliceSize":3,"contentSize":3,"hasContent":true,"hasNext":true,"nextCursorId":3,"first":true,"last":false}}

FCM 응답 조회 : 사용자 채팅방 상세 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 23. /v1/api/users/chatrooms/{roomId}
Parameter Description

roomId

Room Id

GET /v1/api/users/chatrooms/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

roomId

Number

채팅방 ID

roomName

String

채팅방 이름

roomSid

String

채팅방 SID

roomMemberCount

Number

채팅방 현재 인원수

roomImageUri

String

채팅방 이미지 URI

defaultRoomImageType

Number

기본 이미지 타입 번호

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 129

{"roomId":1,"roomName":"testRoom","roomSid":"testSid","roomMemberCount":3,"roomImageUri":"testImageUri","defaultRoomImageType":1}

전체 채팅방 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Parameter

Optional

Description

postCursorId

true

마지막 커서 ID

size

true

페이지 사이즈

roomName

true

채팅방 이름

title

true

책 제목

isbn

true

책 ISBN

tags

true

채팅방 TAG

GET /v1/api/chatrooms?postCursorId=0&size=3&roomName=effective&title=effectiveJava&isbn=12314-12414&tags=test1,test2,test3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

chatRoomResponseList[].roomId

Number

채팅방 ID

chatRoomResponseList[].roomName

String

채팅방 이름

chatRoomResponseList[].roomSid

String

채팅방 SID

chatRoomResponseList[].bookTitle

String

책 제목

chatRoomResponseList[].bookCoverImageUri

String

책 커버 이미지 URI

chatRoomResponseList[].bookAuthors[]

Array

책 저자

chatRoomResponseList[].hostId

Number

방장 ID

chatRoomResponseList[].hostName

String

방장 닉네임

chatRoomResponseList[].hostDefaultProfileImageType

Number

방장 기본 프로필이미지 타입

chatRoomResponseList[].hostProfileImageUri

String

방장 프로필이미지

chatRoomResponseList[].roomMemberCount

Number

채팅방 현재 인원수

chatRoomResponseList[].roomSize

Number

채팅방 정원

chatRoomResponseList[].defaultRoomImageType

Number

기본 이미지 타입 번호

chatRoomResponseList[].roomImageUri

String

채팅방 이미지 URI

chatRoomResponseList[].tags

String

채팅방 TAG

chatRoomResponseList[].lastChatSenderId

Number

마지막 채팅 보낸 사람 ID

chatRoomResponseList[].lastChatId

Number

마지막 채팅 ID

chatRoomResponseList[].lastChatMessage

String

마지막 채팅 내용

chatRoomResponseList[].lastChatDispatchTime

String

마지막 채팅 발송 시간

cursorMeta.sliceSize

Number

현재 슬라이스 크기

cursorMeta.contentSize

Number

현재 슬라이스에 담긴 내용물 크기

cursorMeta.hasContent

Boolean

현재 슬라이스 내용물 유/무

cursorMeta.hasNext

Boolean

다음 슬라이스 유무

cursorMeta.last

Boolean

마지막 슬라이스 여부

cursorMeta.first

Boolean

처음 슬라이스 여부

cursorMeta.nextCursorId

Varies

다음 커서 ID

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 1657

{"chatRoomResponseList":[{"roomId":1,"roomName":"WLMRXZ","roomSid":"Dhb","bookTitle":"book1","bookCoverImageUri":"book1CoverImage@s3","bookAuthors":["author1","author2","author3"],"hostId":1,"hostName":"host1","hostDefaultProfileImageType":1,"hostProfileImageUri":"host1ProfileImage@s3","roomMemberCount":3,"roomSize":100,"defaultRoomImageType":1,"roomImageUri":"n8QpVmc","tags":"tag1,tag2,tag3","lastChatSenderId":1,"lastChatId":1,"lastChatMessage":"lastChatMessage","lastChatDispatchTime":"2024-11-10T18:01:46.159543"},{"roomId":2,"roomName":"R501","roomSid":"1vaaPp","bookTitle":"book2","bookCoverImageUri":"book2CoverImage@s3","bookAuthors":["author4","author5","author6"],"hostId":2,"hostName":"host2","hostDefaultProfileImageType":2,"hostProfileImageUri":"host2ProfileImage@s3","roomMemberCount":100,"roomSize":100,"defaultRoomImageType":3,"roomImageUri":"7jutu0i0","tags":"tag4,tag2,tag3","lastChatSenderId":3,"lastChatId":2,"lastChatMessage":"lastChatMessage2","lastChatDispatchTime":"2024-11-10T18:01:46.159683"},{"roomId":3,"roomName":"86H8735E","roomSid":"3YzLGXR7","bookTitle":"book3","bookCoverImageUri":"book3CoverImage@s3","bookAuthors":["author7","author8","author9"],"hostId":203,"hostName":"host3","hostDefaultProfileImageType":3,"hostProfileImageUri":"host3ProfileImage@s3","roomMemberCount":1000,"roomSize":3000,"defaultRoomImageType":2,"roomImageUri":"sUzZNOV","tags":"tag1,tag5,tag6","lastChatSenderId":8391,"lastChatId":4,"lastChatMessage":"lastChatMessage3","lastChatDispatchTime":"2024-11-10T18:01:46.159703"}],"cursorMeta":{"sliceSize":3,"contentSize":3,"hasContent":true,"hasNext":true,"nextCursorId":4,"first":true,"last":false}}

채팅방 정보 수정

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Part Optional Description

reviseChatRoomRequest

false

채팅방 수정 폼

chatRoomImage

true

채팅방 이미지 [200x200].webp

reviseChatRoomRequest

Path Type Optional Description

roomId

Number

false

채팅방 id

roomName

String

true

채팅방 이름

roomSize

Number

true

채팅방 크기

tags

Array

true

채팅방 태그

isProfileChanged

Boolean

false

프로필 이미지 변경 여부

POST /v1/api/chatrooms/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=reviseChatRoomRequest
Content-Type: application/json

{"roomId":1,"roomName":"changedRoomName","roomSize":200,"tags":["tag5","tag6"],"isProfileChanged":true}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=chatRoomImage
Content-Type: image/webp

test
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

채팅방 입장

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 24. /v1/api/enter/chatrooms/{roomId}
Parameter Description

roomId

Room id

POST /v1/api/enter/chatrooms/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

채팅방 퇴장

Requset Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 25. /v1/api/leave/chatrooms/{roomId}
Parameter Description

roomId

Room id

DELETE /v1/api/leave/chatrooms/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

참여자

방장의 참여자 권한 관리

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 26. /v1/api/chatrooms/{roomId}/participants/{userId}
Parameter Description

roomId

Room Id

userId

User Id

Parameter

Optional

Description

participantStatus

false

[HOST | SUBHOST | GUEST]

PATCH /v1/api/chatrooms/1/participants/2?participantStatus=SUBHOST HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

방장,부방장의 게스트 강퇴

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 27. /v1/api/chatrooms/{roomId}/participants/{userId}
Parameter Description

roomId

Room Id

userId

User Id

DELETE /v1/api/chatrooms/1/participants/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY

채팅

FCM 응답 조회 : 채팅 단 건 상세 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 28. /v1/api/chats/{chatId}
Parameter Description

chatId

Chat Id

GET /v1/api/chats/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

chatId

Number

채팅 Id

chatRoomId

Number

채팅방 Id

message

String

메세지 내용

dispatchTime

String

메세지 발송 시간

sender.id

Number

송신자 Id

sender.nickname

String

송신자 닉네임

sender.profileImageUrl

String

송신자 프로필 이미지 Url

sender.defaultProfileImageType

Number

송신자 기본 프로필 이미지 타입

host.id

Number

방장 id

host.nickname

String

방장 닉네임

host.profileImageUrl

String

방장 프로필 이미지 Url

host.defaultProfileImageType

Number

방장 기본 프로필 이미지 타입

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 303

{"chatId":1,"chatRoomId":1,"message":"first chat","dispatchTime":"2024-11-10T18:01:47.800457","sender":{"id":1,"nickname":"test","profileImageUrl":"test-image-url.com","defaultProfileImageType":1},"host":{"id":2,"nickname":"host","profileImageUrl":"test-host-image-url.com","defaultProfileImageType":3}}

채팅내역 조회

Request Header

Name Description

Authorization

Bearer [JWT token]

Request

Table 29. /v1/api/chatrooms/{roomId}/chats
Parameter Description

roomId

Room Id

Parameter

Optional

Description

size

false

contents 개수

sort

false

[최신순] - id,DESC | [입력순] - id,ASC

postCursorId

true

마지막 커서 Id

GET /v1/api/chatrooms/1/chats?size=2&sort=id,DESC&postCursorId=3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0IiwicHJvdmlkZXIiOiJnb29nbGUiLCJuYW1lIjoiZ29vZ2xlMTIzIiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSJ9.LKub56oLOIJFlTzNiwxqH0V4SubOOBiIZESje9yJDco
Host: bookchat.link

Response

Path Type Description

chatResponseList[].chatId

Number

채팅 Id

chatResponseList[].senderId

Number

송신자 Id

chatResponseList[].message

String

메세지 내용

chatResponseList[].dispatchTime

String

메세지 발송 시간

cursorMeta.sliceSize

Number

현재 슬라이스 크기

cursorMeta.contentSize

Number

현재 슬라이스에 담긴 내용물 크기

cursorMeta.hasContent

Boolean

현재 슬라이스 내용물 유/무

cursorMeta.hasNext

Boolean

다음 슬라이스 유무

cursorMeta.last

Boolean

마지막 슬라이스 여부

cursorMeta.first

Boolean

처음 슬라이스 여부

cursorMeta.nextCursorId

Varies

다음 커서 ID

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 420

{"chatResponseList":[{"chatId":1,"senderId":1,"message":"first chat","dispatchTime":"2024-11-10T18:01:47.730623"},{"chatId":2,"senderId":2,"message":"second chat","dispatchTime":"2024-11-10T18:01:47.730690"},{"chatId":3,"senderId":3,"message":"welcome","dispatchTime":"2024-11-10T18:01:47.730696"}],"cursorMeta":{"sliceSize":3,"contentSize":3,"hasContent":true,"hasNext":true,"nextCursorId":3,"first":true,"last":false}}

Stomp Connection 수립

    CONNECT
    Authorization: Bearer [JWT Token]
    host: wss://bookchat.link/stomp-connection

    ^@

채팅방 Subscribe

roomSid

/topic/{roomSid}

UUID

/topic/heho

    SUBSCRIBE
    Authorization: Bearer [JWT Token]
    host: wss://bookchat.link/topic/[heho]

    ^@

에러응답 Subscribe

    SUBSCRIBE
    Authorization: Bearer [JWT Token]
    host: wss://bookchat.link/user/exchange/amq.direct/error

    ^@

채팅방 메시지 전송 Send

roomId

/subscriptions/send/chatrooms/{roomId}

Long

/subscriptions/send/chatrooms/123

    SEND
    Authorization: Bearer [JWT Token]
    host: wss://bookchat.link/subscriptions/send/chatrooms/[123]

    {
        receiptId: 1
        message: "hi hi"
    }

    ^@
Last updated 2024-09-10 23:01:18 +0900
Clone this wiki locally