1. Auth
1.1. 로그인
1.1.1. 성공
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer validIdToken
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/; Domain=bootme.co.kr; Max-Age=3600; Expires=Fri, 18 Jul 2025 06:02:43 GMT; Secure; HttpOnly; SameSite=Lax
Set-Cookie: refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/; Domain=bootme.co.kr; Max-Age=2592000; Expires=Sun, 17 Aug 2025 05:02:43 GMT; Secure; HttpOnly; SameSite=Lax
Content-Type: application/json
Content-Length: 135
{
"memberId" : 1,
"email" : "john@gmail.com",
"nickname" : "John",
"profileImage" : "imageUrl",
"job" : "Backend Developer"
}
1.1.2. 실패
JWT 파싱에 실패한 경우
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer InvalidBase64PayloadString.eyJhdWQiOiJkMGMwZmEzMWU1ZDQ4YmMzZjQ5MDIwZTExNjY4NDgwOSIsInN1YiI6IjI2NDY1ODY0NTYiLCJhdXRoX3RpbWUiOjE2ODQ1ODE2MzUsImlzcyI6Imh0dHBzOi8va2F1dGgua2FrYW8uY29tIiwibmlja25hbWUiOiLsp4TsmrEiLCJleHAiOjE2ODQ2MDMyMzUsImlhdCI6MTY4NDU4MTYzNSwicGljdHVyZSI6Imh0dHA6Ly9rLmtha2FvY2RuLm5ldC9kbi9kcGs5bDEvYnRxbUdoQTJsS0wvT3owd0R1Sm4xWVYyREluOTJmNkRWSy9pbWdfMTEweDExMC5qcGciLCJlbWFpbCI6ImdvZGZhdGhlcjk0QGtha2FvLmNvbSJ9.UjCa91vPFHFD7K58QFYvT1JJNcXNlCJ1tdVuhW3L4Yzt1klLEypYz-OwDLq_Ggviaf30ImWK5CWzCtOx19UnTmlipwfnGaPA7xhVdTaexsQsa4_tST25weUfrtbii0g6joFzivdYiycbAXKF_dHjjabZLWRZDow8z7t5zcOl1fZRJTfuWWrr-NzmQFcuWn0caFlWybp1s2wcOY9Y6AvyzHgvANyORL6KgkPby_U_tLsXRMtxe-K4-xw7AGkfk3WWV4DKHlotPBIa5zb6xKUXlO-5r4Or70qt13PM6KgHJ0bWUA_HPrt4hflSyemxZlAkFYtZd5IcIQ9btE-EcwbanA
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 1004,
"message" : "토큰 파싱에 실패했습니다."
}
토큰 발행자가 유효하지 않은 경우
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJpbnZhbGlkSXNzdWVyIiwiaWF0IjoxNjg0NTgyMTA5LCJleHAiOjE3MTYxMTgxMDksImF1ZCI6Imh0dHBzOi8va2F1dGgua2FrYW8uY29tLyIsInN1YiI6IjI2NDY1ODY0NTYiLCJhdXRoX3RpbWUiOiIxNjg0NTgxNjM1Iiwibmlja25hbWUiOiLsp4TsmrEiLCJwaWN0dXJlIjoiaHR0cDovL2sua2FrYW9jZG4ubmV0L2RuL2RwazlsMS9idHFtR2hBMmxLTC9PejB3RHVKbjFZVjJESW45MmY2RFZLL2ltZ18xMTB4MTEwLmpwZyIsImVtYWlsIjoiZ29kZmF0aGVyOTRAa2FrYW8uY29tIn0.bNW6GWrscwfSA2oey_D_DniCvH2Dpr8rJVKuIckZVcM
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 88
{
"errorCode" : 1005,
"message" : "유효하지 않은 토큰 발급자입니다."
}
토큰 Audience 가 유효하지 않은 경우
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2Jvb3RtZS5mcm9udC5jb20iLCJpYXQiOjE2ODQ1ODIxMDksImV4cCI6MTcxNjExODEwOSwiYXVkIjoiaW52YWxpZEF1ZGllbmNlIiwic3ViIjoiMjY0NjU4NjQ1NiIsImF1dGhfdGltZSI6IjE2ODQ1ODE2MzUiLCJuaWNrbmFtZSI6IuynhOyasSIsInBpY3R1cmUiOiJodHRwOi8vay5rYWthb2Nkbi5uZXQvZG4vZHBrOWwxL2J0cW1HaEEybEtML096MHdEdUpuMVlWMkRJbjkyZjZEVksvaW1nXzExMHgxMTAuanBnIiwiZW1haWwiOiJnb2RmYXRoZXI5NEBrYWthby5jb20ifQ.bbzTjATw7WaD285BDqKJpWsAXa7JYbsNTGuFRWTc8R0
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 94
{
"errorCode" : 1006,
"message" : "토큰의 Audience 값이 유효하지 않습니다."
}
토큰 발행 시간이 유효하지 않은 경우
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2Jvb3RtZS5mcm9udC5jb20iLCJhdWQiOiJib290bWUuY29tIiwiaWF0IjoxNzUyODE1NTYzLCJleHAiOjE3NTI5MDEzNjN9.bK_yLz72GLyUZzMQLTZPkB3P6_RzfKOCWDiLnL6NXHbauwCW9NhvLE88jiedAm7OF9vFWRBgxClC4fEcGhRoSg
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 94
{
"errorCode" : 1007,
"message" : "토큰의 발행시간이 올바르지 않습니다."
}
토큰이 만료된 경우
HTTP request
POST /auth/login HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2Jvb3RtZS5mcm9udC5jb20iLCJhdWQiOiJib290bWUuY29tIiwiaWF0IjoxNzUyODE0OTYzLCJleHAiOjE3NTI4MTQzNjN9.BJRXHVEl4kU3Mi5_j1oLvwkWTVqlJYRFNqSS7CA0WsCtibjhUXzHKhWMc793NnKzJBtb18dYJlL4kRPHkgWpqw
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 74
{
"errorCode" : 1008,
"message" : "토큰이 만료되었습니다."
}
1.2. 네이버 로그인
1.2.1. 성공
HTTP request
POST /auth/login/naver HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 162
Host: api.bootMe.app
{
"url" : "https://api.bootMe.app/oauth2.0/token?grant_type=authorization_code&client_id=ABCDEFG&client_secret=abcdefg&code=secretcode&state=secrretstate \n"
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/; Domain=bootme.co.kr; Max-Age=3600; Expires=Fri, 18 Jul 2025 06:02:43 GMT; Secure; HttpOnly; SameSite=Lax
Set-Cookie: refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/; Domain=bootme.co.kr; Max-Age=2592000; Expires=Sun, 17 Aug 2025 05:02:43 GMT; Secure; HttpOnly; SameSite=Lax
Content-Type: application/json
Content-Length: 135
{
"memberId" : 1,
"email" : "john@gmail.com",
"nickname" : "John",
"profileImage" : "imageUrl",
"job" : "Backend Developer"
}
1.3. 로그아웃
1.3.1. 성공
HTTP request
POST /auth/logout HTTP/1.1
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=Lax
Set-Cookie: refreshToken=; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=Lax
1.4. 시크릿 요청
1.4.1. 성공
HTTP request
GET /auth/secrets HTTP/1.1
Bootme_Secret: validSecret
Origin: https://api.bootMe.app
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: https://bootme.co.kr
Access-Control-Expose-Headers: Access-Control-Allow-Credentials
Access-Control-Expose-Headers: Login
Access-Control-Allow-Credentials: true
Login: false
Content-Type: application/json
Content-Length: 384
{
"apiUrl" : null,
"googleClientId" : null,
"googleAudience" : null,
"naverClientId" : null,
"naverClientSecret" : null,
"naverAudience" : null,
"naverSigningKey" : null,
"kakaoRestApiKey" : null,
"kakaoClientSecret" : null,
"kakaoAudience" : null,
"kakaoJavascriptKey" : null,
"bootmeAudience" : null,
"bootmeSigningKey" : null,
"gaMeasurementId" : null
}
2. Member
2.1. 회원 프로필 조회
2.1.1. 성공
HTTP request
GET /member/1/profile HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 529
{
"profileImage" : "https://lh3.googleusercontent.com/a/AGNmyxZgJo-m0_NrDgTZi2vJFtc4hC7c6xhDcTPcMg6S=s96-c",
"email" : "john@gmail.com",
"nickname" : "michael_jordan_63",
"job" : "웹 백엔드 개발자",
"stacks" : [ {
"name" : "Java",
"type" : "language",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png"
}, {
"name" : "JavaScript",
"type" : "language",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/javascript.png"
} ]
}
2.2. 회원 자신의 프로필 조회
2.2.1. 성공
HTTP request
GET /member/me HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 253
{
"profileImage" : "https://lh3.googleusercontent.com/a/AGNmyxZgJo-m0_NrDgTZi2vJFtc4hC7c6xhDcTPcMg6S=s96-c",
"email" : "john@gmail.com",
"nickname" : "michael_jordan_63",
"job" : "웹 백엔드 개발자",
"stacks" : [ "Java", "JavaScript" ]
}
2.3. 회원 프로필 수정
2.3.1. 성공
HTTP request
PUT /member/1 HTTP/1.1
Content-Type: application/json
Content-Length: 167
Host: api.bootMe.app
{
"email" : "john@gmail.com",
"nickname" : "michael_jordan_63",
"job" : "웹 백엔드 개발자",
"stackNames" : [ "Java", "JavaScript", "Spring", "React" ]
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
2.4. 회원 프로필 이미지 수정
2.4.1. 성공
HTTP request
PATCH /member/1/profile_image HTTP/1.1
Content-Type: application/json
Content-Length: 100
Host: api.bootMe.app
{
"profileImage" : "https://api.bootMe.app/a/AGNmyxZgJo-m0_NrDgTZi2vJFtc4hC7c6xhDcTPcMg6S=s96-c"
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
2.5. 닉네임 중복 검사
2.5.1. 성공
HTTP request
GET /member/nickname/%EC%B2%A0%EC%88%98/exists HTTP/1.1
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 5
false
3. Stack
3.1. 기술 스택 전체 조회
3.1.1. 성공
HTTP request
GET /stacks HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 562
[ {
"name" : "Java",
"type" : "language",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png"
}, {
"name" : "JavaScript",
"type" : "language",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/javascript.png"
}, {
"name" : "Spring",
"type" : "framework",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/spring.png"
}, {
"name" : "React",
"type" : "framework",
"icon" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/react.png"
} ]
3.2. 기술 스택 추가
3.2.1. 성공
HTTP request
POST /stacks HTTP/1.1
Content-Type: application/json
Content-Length: 438
Host: api.bootMe.app
[ {
"name" : "Java",
"type" : "language",
"icon" : "https://api.bootMe.app/logos/stack/java.png"
}, {
"name" : "JavaScript",
"type" : "language",
"icon" : "https://api.bootMe.app/logos/stack/javascript.png"
}, {
"name" : "Spring",
"type" : "framework",
"icon" : "https://api.bootMe.app/logos/stack/spring.png"
}, {
"name" : "React",
"type" : "framework",
"icon" : "https://api.bootMe.app/logos/stack/react.png"
} ]
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
4. Company
4.1. 회사 추가
4.1.1. 성공
HTTP request
POST /companies HTTP/1.1
Content-Type: application/json
Content-Length: 191
Host: api.bootMe.app
{
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://api.bootMe.app/img/img_story_renewal.png"
}
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Location: /companies/1
Content-Type: application/json
Content-Length: 378
{
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
}
4.2. 회사 조회
4.2.1. 성공
HTTP request
GET /companies/1 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 378
{
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
}
4.2.2. 실패
해당 id의 회사가 존재하지 않는 경우
HTTP request
GET /companies/2 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3002,
"message" : "존재하지 않는 회사입니다."
}
4.3. 회사 전체 조회
4.3.1. 성공
HTTP request
GET /companies HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Access-Control-Expose-Headers: X-Total-Count
X-Total-Count: 2
Content-Range: companies 0-2/2
Content-Type: application/json
Content-Length: 785
[ {
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
}, {
"id" : 2,
"name" : "카카오",
"serviceName" : "카카오톡",
"url" : "www.kakao.com",
"serviceUrl" : "www.talk.kakao.com",
"logoUrl" : "https://t1.kakaocdn.net/kakaocorp/kakaocorp/admin/1b904e28017800001.png",
"courses" : [ "쿠팡 서버 개발자 부트캠프 4기", "우아한형제들 프론트엔드 개발자 부트캠프 5기", "구글 서버 개발자 부트캠프 6기" ]
} ]
4.4. 회사 수정
4.4.1. 성공
HTTP request
PUT /companies/1 HTTP/1.1
Content-Type: application/json
Content-Length: 191
Host: api.bootMe.app
{
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://api.bootMe.app/img/img_story_renewal.png"
}
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
4.4.2. 실패
해당 id의 회사가 존재하지 않는 경우
HTTP request
PUT /companies/2 HTTP/1.1
Content-Type: application/json
Content-Length: 214
Host: api.bootMe.app
{
"name" : "카카오",
"serviceName" : "카카오톡",
"url" : "www.kakao.com",
"serviceUrl" : "www.talk.kakao.com",
"logoUrl" : "https://api.bootMe.app/kakaocorp/kakaocorp/admin/1b904e28017800001.png"
}
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3002,
"message" : "존재하지 않는 회사입니다."
}
4.5. 회사 삭제
4.5.1. 성공
HTTP request
DELETE /companies/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
4.5.2. 실패
해당 id의 회사가 존재하지 않는 경우
HTTP request
DELETE /companies/2 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3002,
"message" : "존재하지 않는 회사입니다."
}
5. Course
5.1. 코스 추가
5.1.1. 성공
HTTP request
POST /courses HTTP/1.1
Content-Type: application/json
Content-Length: 762
Host: api.bootMe.app
{
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"companyName" : "네이버",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"recommended" : true,
"free" : true,
"kdt" : true,
"online" : true,
"tested" : true,
"prerequisiteRequired" : true
}
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Location: /courses/1
Content-Type: application/json
Content-Length: 1315
{
"id" : 1,
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"detail" : "<p> Course Detail <p>",
"company" : {
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
},
"clicks" : 1,
"bookmarks" : 4,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : true,
"registerOpen" : false,
"tested" : true,
"online" : true,
"recommended" : true,
"bookmarked" : false,
"free" : true,
"kdt" : true
}
5.1.2. 실패
등록되지 않은 회사의 코스인 경우
HTTP request
POST /courses HTTP/1.1
Content-Type: application/json
Content-Length: 796
Host: api.bootMe.app
{
"title" : "카카오 프론트엔드 개발자 부트캠프 2기",
"name" : "카카오 프론트엔드 개발자 부트캠프",
"generation" : 2,
"url" : "www.boot.kakao.com",
"companyName" : "카카오",
"location" : "서울시 관악구",
"superCategories" : [ "게임", "AI" ],
"subCategories" : [ "프론트엔드", "안드로이드", "iOS" ],
"languages" : [ "TypeScript", "Kotlin" ],
"frameworks" : [ "Django", "Spring" ],
"cost" : 500,
"period" : 28,
"dates" : {
"registrationStartDate" : "2022-01-01",
"registrationEndDate" : "2022-01-31",
"courseStartDate" : "2022-02-01",
"courseEndDate" : "2022-02-28"
},
"recommended" : false,
"free" : false,
"kdt" : false,
"online" : false,
"tested" : false,
"prerequisiteRequired" : false
}
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3002,
"message" : "존재하지 않는 회사입니다."
}
5.2. 코스 조회
5.2.1. 성공
HTTP request
GET /courses/1 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 1315
{
"id" : 1,
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"detail" : "<p> Course Detail <p>",
"company" : {
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
},
"clicks" : 1,
"bookmarks" : 4,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : true,
"registerOpen" : false,
"tested" : true,
"online" : true,
"recommended" : true,
"bookmarked" : false,
"free" : true,
"kdt" : true
}
5.2.2. 실패
해당 id의 코스가 존재하지 않는 경우
HTTP request
GET /courses/2 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3001,
"message" : "존재하지 않는 코스입니다."
}
5.3. 코스 전체 조회
5.3.1. 성공
HTTP request
GET /courses HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 4439
{
"content" : [ {
"id" : 1,
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"company" : {
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
},
"clicks" : 1,
"bookmarks" : 4,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : true,
"registerOpen" : false,
"tested" : true,
"online" : true,
"recommended" : true,
"bookmarked" : false,
"free" : true,
"kdt" : true
}, {
"id" : 2,
"title" : "카카오 프론트엔드 개발자 부트캠프 2기",
"name" : "카카오 프론트엔드 개발자 부트캠프",
"generation" : 2,
"url" : "www.boot.kakao.com",
"location" : "서울시 관악구",
"superCategories" : [ "게임", "AI" ],
"subCategories" : [ "프론트엔드", "안드로이드", "iOS" ],
"languages" : [ "TypeScript", "Kotlin" ],
"frameworks" : [ "Django", "Spring" ],
"cost" : 500,
"period" : 28,
"dates" : {
"registrationStartDate" : "2022-01-01",
"registrationEndDate" : "2022-01-31",
"courseStartDate" : "2022-02-01",
"courseEndDate" : "2022-02-28"
},
"company" : {
"id" : 2,
"name" : "카카오",
"serviceName" : "카카오톡",
"url" : "www.kakao.com",
"serviceUrl" : "www.talk.kakao.com",
"logoUrl" : "https://t1.kakaocdn.net/kakaocorp/kakaocorp/admin/1b904e28017800001.png",
"courses" : [ "쿠팡 서버 개발자 부트캠프 4기", "우아한형제들 프론트엔드 개발자 부트캠프 5기", "구글 서버 개발자 부트캠프 6기" ]
},
"clicks" : 2,
"bookmarks" : 5,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : false,
"registerOpen" : false,
"tested" : false,
"online" : false,
"recommended" : false,
"bookmarked" : false,
"free" : false,
"kdt" : false
}, {
"id" : 3,
"title" : "라인 서버 개발자 부트캠프 3기",
"name" : "라인 서버 개발자 부트캠프 부트캠프",
"generation" : 3,
"url" : "www.boot.line.com",
"location" : "서울시 중구",
"superCategories" : [ "AI", "데브옵스" ],
"subCategories" : [ "풀스택" ],
"languages" : [ "Kotlin", "Swift" ],
"frameworks" : [ "Node.js", "Vue.js" ],
"cost" : 700,
"period" : 210,
"dates" : {
"registrationStartDate" : "2023-02-23",
"registrationEndDate" : "2024-01-01",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-07-31"
},
"company" : {
"id" : 3,
"name" : "라인",
"serviceName" : "라인앱",
"url" : "www.line.com",
"serviceUrl" : "www.app.line.com",
"logoUrl" : "https://vos.line-scdn.net/strapi-cluster-instance-bucket-84/brand_02_8089c34e51.jpeg",
"courses" : [ "페이스북 서버 개발자 부트캠프 7기", "마이크로소프트 프론트엔드 개발자 부트캠프 8기", "아마존 서버 개발자 부트캠프 9기" ]
},
"clicks" : 3,
"bookmarks" : 6,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : true,
"registerOpen" : false,
"tested" : true,
"online" : true,
"recommended" : true,
"bookmarked" : false,
"free" : true,
"kdt" : true
} ],
"pageable" : "INSTANCE",
"totalElements" : 3,
"totalPages" : 1,
"last" : true,
"size" : 3,
"number" : 0,
"sort" : {
"empty" : true,
"unsorted" : true,
"sorted" : false
},
"numberOfElements" : 3,
"first" : true,
"empty" : false
}
5.4. 코스 수정
5.4.1. 성공
HTTP request
PUT /courses/1 HTTP/1.1
Content-Type: application/json
Content-Length: 762
Host: api.bootMe.app
{
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"companyName" : "네이버",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"recommended" : true,
"free" : true,
"kdt" : true,
"online" : true,
"tested" : true,
"prerequisiteRequired" : true
}
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
5.4.2. 실패
해당 id의 코스가 존재하지 않는 경우
HTTP request
PUT /courses/2 HTTP/1.1
Content-Type: application/json
Content-Length: 796
Host: api.bootMe.app
{
"title" : "카카오 프론트엔드 개발자 부트캠프 2기",
"name" : "카카오 프론트엔드 개발자 부트캠프",
"generation" : 2,
"url" : "www.boot.kakao.com",
"companyName" : "카카오",
"location" : "서울시 관악구",
"superCategories" : [ "게임", "AI" ],
"subCategories" : [ "프론트엔드", "안드로이드", "iOS" ],
"languages" : [ "TypeScript", "Kotlin" ],
"frameworks" : [ "Django", "Spring" ],
"cost" : 500,
"period" : 28,
"dates" : {
"registrationStartDate" : "2022-01-01",
"registrationEndDate" : "2022-01-31",
"courseStartDate" : "2022-02-01",
"courseEndDate" : "2022-02-28"
},
"recommended" : false,
"free" : false,
"kdt" : false,
"online" : false,
"tested" : false,
"prerequisiteRequired" : false
}
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3001,
"message" : "존재하지 않는 코스입니다."
}
5.5. 코스 상세 수정
5.5.1. 성공
HTTP request
PATCH /courses/1/detail HTTP/1.1
Content-Type: application/json
Content-Length: 59
Host: api.bootMe.app
{
"detail" : "<p> 수정된 코스 상세 정보 1 <p>"
}
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
5.5.2. 실패
해당 id의 코스가 존재하지 않는 경우
HTTP request
PATCH /courses/2/detail HTTP/1.1
Content-Type: application/json
Content-Length: 59
Host: api.bootMe.app
{
"detail" : "<p> 수정된 코스 상세 정보 2 <p>"
}
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3001,
"message" : "존재하지 않는 코스입니다."
}
5.6. 코스 삭제
5.6.1. 성공
HTTP request
DELETE /courses/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
5.6.2. 실패
해당 id의 코스가 존재하지 않는 경우
HTTP request
DELETE /courses/2 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 78
{
"errorCode" : 3001,
"message" : "존재하지 않는 코스입니다."
}
6. Post
6.1. 게시물 추가
6.1.1. 성공
HTTP request
POST /posts HTTP/1.1
Content-Type: application/json
Content-Length: 232
Host: api.bootMe.app
{
"topic" : "자유",
"title" : "안녕하세요",
"content" : "국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고, 시장의 지배와 경제력의 남용을 방지하며"
}
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Access-Control-Expose-Headers: Location
Location: /posts/1
6.2. 게시물 조회
6.2.1. 성공
HTTP request
GET /posts/1 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 580
{
"id" : 1,
"writerId" : 1,
"writerNickname" : "철수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png",
"topic" : "자유",
"title" : "안녕하세요",
"content" : "국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고, 시장의 지배와 경제력의 남용을 방지하며",
"likes" : 10,
"clicks" : 20,
"bookmarks" : 30,
"status" : "DISPLAY",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 3,
"voted" : "UPVOTE",
"bookmarked" : false
}
6.3. 게시물 전체 조회
6.3.1. 성공
HTTP request
GET /posts HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 2160
{
"content" : [ {
"id" : 1,
"writerId" : 1,
"writerNickname" : "철수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png",
"topic" : "자유",
"title" : "안녕하세요",
"contentExcerpt" : "국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고, 시장의 지배와 경제력의 남용을 방지하며",
"likes" : 10,
"clicks" : 20,
"bookmarks" : 30,
"status" : "DISPLAY",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 1,
"voted" : "UPVOTE",
"bookmarked" : false,
"viewed" : false
}, {
"id" : 2,
"writerId" : 2,
"writerNickname" : "영희",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/javascript.png",
"topic" : "부트캠프 질문",
"title" : "반가워요",
"contentExcerpt" : "경제주체간의 조화를 통한 경제의 민주화를 위하여 경제에 관한 규제와 조정을 할 수 있다.",
"likes" : 11,
"clicks" : 21,
"bookmarks" : 31,
"status" : "DELETED",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 2,
"voted" : "DOWNVOTE",
"bookmarked" : false,
"viewed" : false
}, {
"id" : 3,
"writerId" : 3,
"writerNickname" : "지수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/kotlin.png",
"topic" : "개발 질문",
"title" : "좋은 하루",
"contentExcerpt" : "국가는 평생교육을 진흥하여야 한다. 제안된 헌법개정안은 대통령이 20일 이상의 기간 이를 공고하여야 한다.",
"likes" : 12,
"clicks" : 22,
"bookmarks" : 32,
"status" : "HIDDEN",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 3,
"voted" : "NONE",
"bookmarked" : false,
"viewed" : false
} ],
"number" : 0,
"size" : 3,
"totalElements" : 3,
"totalPages" : 1,
"last" : true,
"sort" : {
"empty" : true,
"unsorted" : true,
"sorted" : false
},
"numberOfElements" : 3,
"first" : true,
"empty" : false
}
6.4. 게시물 수정
6.4.1. 성공
HTTP request
PUT /posts/1 HTTP/1.1
Content-Type: application/json
Content-Length: 232
Host: api.bootMe.app
{
"topic" : "자유",
"title" : "안녕하세요",
"content" : "국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고, 시장의 지배와 경제력의 남용을 방지하며"
}
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
6.5. 게시물 삭제
6.5.1. 성공
HTTP request
DELETE /posts/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
7. Comment
7.1. 댓글 추가
7.1.1. 성공
HTTP request
POST /posts/1/comments HTTP/1.1
Content-Type: application/json
Content-Length: 93
Host: api.bootMe.app
{
"parentId" : 1,
"content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
}
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Location: /comments/1
7.2. 댓글 조회
7.2.1. 성공
HTTP request
GET /comments/1 HTTP/1.1
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 428
{
"id" : 1,
"postId" : 1,
"writerId" : 1,
"writerNickname" : "철수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png",
"parentId" : 1,
"content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
"groupNum" : 1,
"levelNum" : 1,
"orderNum" : 1,
"likes" : 10,
"voted" : "UPVOTE",
"status" : "DISPLAY",
"createdAt" : 1,
"modifiedAt" : 1
}
7.3. 댓글 수정
7.3.1. 성공
HTTP request
PUT /comments/1 HTTP/1.1
Content-Type: application/json
Content-Length: 93
Host: api.bootMe.app
{
"parentId" : 1,
"content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
}
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
7.4. 댓글 삭제
7.4.1. 성공
HTTP request
DELETE /comments/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
8. Vote
8.1. 투표 (Upvote / Downvote)
8.1.1. 성공
HTTP request
POST /vote HTTP/1.1
Content-Type: application/json
Content-Length: 96
Host: api.bootMe.app
{
"votableType" : "POST_COMMENT",
"votableId" : 1,
"voteType" : "POST",
"memberId" : 1
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 428
{
"id" : 1,
"postId" : 1,
"writerId" : 1,
"writerNickname" : "철수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png",
"parentId" : 1,
"content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
"groupNum" : 1,
"levelNum" : 1,
"orderNum" : 1,
"likes" : 10,
"voted" : "UPVOTE",
"status" : "DISPLAY",
"createdAt" : 1,
"modifiedAt" : 1
}
9. Image
9.1. 이미지 업로드
9.1.1. 성공
HTTP request
POST /images HTTP/1.1
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: api.bootMe.app
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image; filename=filename.jpg
Content-Type: image/jpeg
some-image
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: text/plain;charset=UTF-8
Content-Length: 72
https://bootme-images.s3.ap-northeast-2.amazonaws.com/etc/smile_face.png
10. Prompt
10.1. 프롬프트 생성
10.1.1. 성공
HTTP request
POST /prompts/generation/feature HTTP/1.1
Content-Type: application/json
Content-Length: 438
Host: api.bootMe.app
{
"promptType" : "feature",
"question" : null,
"example" : null,
"featureDescription" : "스프링 부트 프로젝트에서 알림 기능 구현하기 위한 Entity 클래스 작성",
"exampleCode" : "예시 엔티티 클래스 코드",
"apiDescription" : null,
"erd" : null,
"entity" : null,
"techStack" : [ "Java", "Spring" ],
"principles" : [ "OOP" ],
"responseFormat" : "Basic",
"promptLanguage" : "English"
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
10.2. 프롬프트 입력
10.2.1. 성공
HTTP request
POST /prompts/submission HTTP/1.1
Content-Type: application/json
Content-Length: 41
Host: api.bootMe.app
{
"prompt" : "입력된 프롬프트"
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
11. Course Bookmark
11.1. 북마크 코스 추가
11.1.1. 성공
HTTP request
POST /bookmarks/1/courses/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Location: /bookmarks/1/courses1
11.2. 북마크 코스 삭제
11.2.1. 성공
HTTP request
DELETE /bookmarks/1/courses/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
11.3. 북마크 코스 전체 조회
11.3.1. 성공
HTTP request
GET /bookmarks/1/courses?page=1&size=10 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 3057
{
"content" : [ {
"id" : 1,
"title" : "네이버 서버 개발자 부트캠프 1기",
"name" : "네이버 서버 개발자 부트캠프",
"generation" : 1,
"url" : "www.boot.naver.com",
"location" : "서울시 강남구",
"superCategories" : [ "웹", "모바일 앱" ],
"subCategories" : [ "백엔드", "안드로이드" ],
"languages" : [ "JavaScript", "Java" ],
"frameworks" : [ "React", "Spring" ],
"cost" : 0,
"period" : 90,
"dates" : {
"registrationStartDate" : "2023-01-01",
"registrationEndDate" : "2024-01-31",
"courseStartDate" : "2024-02-01",
"courseEndDate" : "2024-04-30"
},
"company" : {
"id" : 1,
"name" : "네이버",
"serviceName" : "네이버앱",
"url" : "www.naver.com",
"serviceUrl" : "www.app.naver.com",
"logoUrl" : "https://logoproject.naver.com/img/img_story_renewal.png",
"courses" : [ "네이버 서버 개발자 부트캠프 1기", "카카오 프론트엔드 개발자 부트캠프 2기", "라인 서버 개발자 부트캠프 3기" ]
},
"clicks" : 1,
"bookmarks" : 4,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : true,
"registerOpen" : false,
"tested" : true,
"online" : true,
"recommended" : true,
"bookmarked" : false,
"free" : true,
"kdt" : true
}, {
"id" : 2,
"title" : "카카오 프론트엔드 개발자 부트캠프 2기",
"name" : "카카오 프론트엔드 개발자 부트캠프",
"generation" : 2,
"url" : "www.boot.kakao.com",
"location" : "서울시 관악구",
"superCategories" : [ "게임", "AI" ],
"subCategories" : [ "프론트엔드", "안드로이드", "iOS" ],
"languages" : [ "TypeScript", "Kotlin" ],
"frameworks" : [ "Django", "Spring" ],
"cost" : 500,
"period" : 28,
"dates" : {
"registrationStartDate" : "2022-01-01",
"registrationEndDate" : "2022-01-31",
"courseStartDate" : "2022-02-01",
"courseEndDate" : "2022-02-28"
},
"company" : {
"id" : 2,
"name" : "카카오",
"serviceName" : "카카오톡",
"url" : "www.kakao.com",
"serviceUrl" : "www.talk.kakao.com",
"logoUrl" : "https://t1.kakaocdn.net/kakaocorp/kakaocorp/admin/1b904e28017800001.png",
"courses" : [ "쿠팡 서버 개발자 부트캠프 4기", "우아한형제들 프론트엔드 개발자 부트캠프 5기", "구글 서버 개발자 부트캠프 6기" ]
},
"clicks" : 2,
"bookmarks" : 5,
"createdAt" : 0,
"modifiedAt" : 0,
"prerequisiteRequired" : false,
"registerOpen" : false,
"tested" : false,
"online" : false,
"recommended" : false,
"bookmarked" : false,
"free" : false,
"kdt" : false
} ],
"pageable" : "INSTANCE",
"totalElements" : 2,
"totalPages" : 1,
"last" : true,
"size" : 2,
"number" : 0,
"sort" : {
"empty" : true,
"unsorted" : true,
"sorted" : false
},
"numberOfElements" : 2,
"first" : true,
"empty" : false
}
12. Post Bookmark
12.1. 북마크 포스트 추가
12.1.1. 성공
HTTP request
POST /bookmarks/1/posts/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Location: /member/1/bookmarks1
12.2. 북마크 포스트 삭제
12.2.1. 성공
HTTP request
DELETE /bookmarks/1/posts/1 HTTP/1.1
Content-Type: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
12.3. 북마크 포스트 전체 조회
12.3.1. 성공
HTTP request
GET /bookmarks/1/posts?page=1&size=10 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 1552
{
"content" : [ {
"id" : 1,
"writerId" : 1,
"writerNickname" : "철수",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/java.png",
"topic" : "자유",
"title" : "안녕하세요",
"contentExcerpt" : "국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고, 시장의 지배와 경제력의 남용을 방지하며",
"likes" : 10,
"clicks" : 20,
"bookmarks" : 30,
"status" : "DISPLAY",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 1,
"voted" : "UPVOTE",
"bookmarked" : false,
"viewed" : false
}, {
"id" : 2,
"writerId" : 2,
"writerNickname" : "영희",
"writerProfileImage" : "https://bootme-images.s3.ap-northeast-2.amazonaws.com/logos/stack/javascript.png",
"topic" : "부트캠프 질문",
"title" : "반가워요",
"contentExcerpt" : "경제주체간의 조화를 통한 경제의 민주화를 위하여 경제에 관한 규제와 조정을 할 수 있다.",
"likes" : 11,
"clicks" : 21,
"bookmarks" : 31,
"status" : "DELETED",
"createdAt" : 1,
"modifiedAt" : 1,
"commentCount" : 2,
"voted" : "DOWNVOTE",
"bookmarked" : false,
"viewed" : false
} ],
"pageable" : "INSTANCE",
"totalElements" : 2,
"totalPages" : 1,
"last" : true,
"size" : 2,
"number" : 0,
"sort" : {
"empty" : true,
"unsorted" : true,
"sorted" : false
},
"numberOfElements" : 2,
"first" : true,
"empty" : false
}
13. SSE
13.1. SSE 연결
13.1.1. 성공
HTTP request
GET /connect HTTP/1.1
Accept: text/event-stream
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
14. Notification
14.1. 알림 조회
14.1.1. 성공
HTTP request
GET /notifications/1 HTTP/1.1
Accept: application/json
Host: api.bootMe.app
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 905
[ {
"notificationId" : 1,
"memberId" : 1,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684335600,
"checked" : false
}, {
"notificationId" : 2,
"memberId" : 2,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684422000,
"checked" : false
}, {
"notificationId" : 3,
"memberId" : 3,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684508400,
"checked" : false
} ]
14.2. 알림 전체 확인
14.2.1. 성공
HTTP request
PUT /notifications/1/checked HTTP/1.1
Accept: application/json
Host: api.bootMe.app
Content-Type: application/x-www-form-urlencoded
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 905
[ {
"notificationId" : 1,
"memberId" : 1,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684335600,
"checked" : false
}, {
"notificationId" : 2,
"memberId" : 2,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684422000,
"checked" : false
}, {
"notificationId" : 3,
"memberId" : 3,
"event" : "signUp",
"message" : "환영합니다! 다양한 소프트웨어 커리큘럼들을 비교하고 선택할 수 있도록 도와드릴게요 :) \uD83D\uDE0A \uD83D\uDE00 \uD83D\uDE04 ☺️",
"createdAt" : 1684508400,
"checked" : false
} ]
15. Webhook
15.1. 웹훅 처리
15.1.1. 성공
HTTP request
POST /webhook HTTP/1.1
Content-Type: application/json
Bootme_Secret: secret
Content-Length: 179
Host: api.bootMe.app
{
"sessionId" : 1,
"memberId" : 1,
"event" : "courseClicked",
"data" : {
"courseId" : "1"
},
"currentUrl" : "https://api.bootMe.app/",
"createdAt" : 1684335600
}
HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
15.1.2. 실패
유효한 웹훅 이벤트가 아닌 경우
HTTP request
POST /webhook HTTP/1.1
Content-Type: application/json
Bootme_Secret: secret
Content-Length: 180
Host: api.bootMe.app
{
"sessionId" : 1,
"memberId" : 1,
"event" : "login",
"data" : {
"oAuthProvider" : "naver"
},
"currentUrl" : "https://api.bootMe.app/",
"createdAt" : 1684335600
}
HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Login: false
Access-Control-Expose-Headers: Login
Content-Type: application/json
Content-Length: 89
{
"errorCode" : 5002,
"message" : "유효하지 않은 webhook 이벤트입니다."
}