-
Notifications
You must be signed in to change notification settings - Fork 4
API 명세
강성준 edited this page Dec 5, 2022
·
30 revisions
- 소셜 로그인
-
GET
/user/login?social=${'naver' | 'kakao' | 'google'}
로 해당 페이지로 이동 후 인증 진행. - Redirection 문제 때문에
axios
가 아닌anchor
태그 사용 권장. - 쿠키에
accessToken
식으로 jwt 토큰 생성. - DB 확인 후 미가입자 인 경우 signup 페이지로 이동.
-
jwt payload 확인 및 재생성
-
POST
/user
로 signupData 객체 전송 필수,
{ signupData : { nickname : string characterName : string } }
- 성공 (200)
"회원가입 완료!!"
- 실패
{ // body 형식 오류 "statusCode": 400, "message": [ "특수문자는 불가합니다.", "nickname must be shorter than or equal to 12 characters", "nickname must be longer than or equal to 4 characters", "nickname must be a string", "nickname should not be empty", "characterName must be a string", "characterName should not be empty" ], "error": "Bad Request" }
{ // 토큰이 없는 경우 "statusCode": 401, "message": "Unauthorized" }
{ //닉네임이 중복되는 경우 "statusCode": 406, "message": "닉네임이 중복됩니다.", "error": "Not Acceptable" }
{ // 제공하지 않는 캐릭터를 넣었을 경우. "statusCode": 400, "message": "nohair2 can't be the character name.", "error": "Bad Request" }
-
-
GET
/user/logout
요청 시 AccessToken 만료.-
GET
/user/logout
- 성공 (200)
"로그아웃 되었습니다."
-
-
DELETE
/user
로 요청 시 Guards 로 토큰 인증 확인. -
토큰이 인증되었다면, DB에서 해당 유저 제거.
-
DELETE
/user
- 성공 (200)
"캐릭터가 삭제 되었습니다."
-
-
GET
/user/auth
로 요청 시 Guards 로 토큰 인증 확인.-
DELETE
/user
-
nickname
과characterName
반환 - 성공 (200)
{ "nickname": "stouter", "characterName": "cat" }
- 실패
{ "statusCode": 401, "message": "Unauthorized" }
-
-
signup
API 와 동일** -
jwt payload 확인 및 재생성
-
POST
/user
로 signupData 객체 전송 필수,
{ signupData : { nickname : string characterName : string } }
- 성공 (200)
"회원가입 완료!!"
- 실패 (400)
{ "statusCode": 400, "message": [ "특수문자는 불가합니다.", "nickname must be shorter than or equal to 12 characters", "nickname must be longer than or equal to 4 characters", "nickname must be a string", "nickname should not be empty", "characterName must be a string", "characterName should not be empty" ], "error": "Bad Request" }
-
-
내가 팔로잉 중인 사람들의 목록 반환.
-
GET
/friendship
- 성공 (200)
[ // 팔로잉 2명 { "userId": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "nickname": "hungjin", "characterName": "lion" }, { "userId": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "nickname": "hungjin", "characterName": "lion" } ]
[]// 팔로잉 0명
-
-
GET
/friendship/{시작닉네임}
으로 요청-
GET
/friendship/{시작닉네임}
- 성공 (200) - 항상 배열 형식으로 반환
[ // 해당 이름으로 시작하는 유저 2 { "id": "1NJfqr-aPPEfIJPIvFNd6OzG8qFqTUSRNbT7bxM24R0", "nickname": "jongbin", "characterName": "curlyhair", "social": "naver", "created_at": "2022-11-29", "deleted": false }, { "id": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak", "nickname": "j002", "characterName": "mophair", "social": "naver", "created_at": "2022-11-29", "deleted": false } ]
// 해당 이름으로 시작하는 유저 x []
- 실패 (404)
{ // Query 오류 "statusCode": 404, "message": "해당 nickname으로 시작하는 유저들이 없습니다.", "error": "Not Found" }
{ // 토큰 x "statusCode": 401, "message": "Unauthorized" }
-
-
PUT
/friendship/{상대닉네임}
으로 요청-
PUT
/friendship/{상대닉네임}
- 성공 (200)
팔로우한 유저의 유저데이터 { "userId": "ABCDEFGHIJHLMNOPQRSTUVWXYZ", "nickname": "usernicknameSample", "characterName": "mophair" }
- 실패 (404)
{ "statusCode": 404, "message": "이미 팔로우한 유저입니다.", "error": "Not Found" }
-
-
DELETE
/friendship/{상대닉네임}
으로 요청-
DELETE
/friendship/{상대닉네임}
- 성공 (200)
"팔로우 취소 성공"
- 실패 (404)
{ "statusCode": 404, "message": "팔로우 취소 실패", "error": "Not Found" }
-
-
내가 Following 한 유저들의 게시글만 불러오기. (최신순)
-
GET
/board/{all | like | me}
로 요청 (all : 팔로우한 모든 게시글, like : 좋아요한 게시물, me : 나의 게시물)
- 성공 (200)
[ // 게시글 목록 { "id": 2, "nickname": "stouter", "content": "너무 좋아요", "category": "fishing", "liked": true, "created_at": "2022-11-23T13:57:44.356Z" }, { "id": 1, "nickname": "stouter", "content": "너무 좋아요", "category": "lifencut", "liked": false, "created_at": "2022-11-23T13:49:51.475Z" } ]
[] // 팔로잉 유저 없음 || 팔로잉 유저들 게시글 없음
-
-
게임 혹은 서비스 중 공유하기 버튼으로 요청
-
POST
/board
로articleData
와 함께 요청
{ articleData : { content : string, category : string // ("fishing" | "lifencut") } }
- 성공 (200)
"글 작성 성공"
- 실패 (400)
{ "statusCode": 400, "message": [ "content must be shorter than or equal to 36 characters", "content must be a string", "content should not be empty", "category must be shorter than or equal to 36 characters", "category must be a string", "category should not be empty" ], "error": "Bad Request" }
-
-
내가 작성한 글만 삭제 가능
-
DELETE
/board/{articleId}
- 성공 (200)
// 내 게시글일 때 "삭제처리 되었습니다."
- 실패 (401)
{ // 내 게시글이 아닐 때, "statusCode": 401, "message": "삭제 권한이 없습니다.", "error": "Unauthorized" }
-
-
게시글에 좋아요 버튼으로 API 요청
-
PUT
/board/like/{articleId}
- 성공 (200)
"좋아요 성공"
- 실패
// 이미 좋아요 눌렀을 때, { "statusCode": 406, "message": "이미 좋아요를 누르셨습니다.", "error": "Not Acceptable" }
// 없는 게시글을 좋아요 눌렀을 때, { "statusCode": 404, "message": "해당하는 게시글이 없습니다.", "error": "Not Found" }
-
-
게시글에 좋아요 해체 버튼으로 API 요청
-
DELETE
/board/like/{articleId}
- 성공 (200)
"좋아요 취소 성공"
- 실패
// 이미 좋아요 눌렀을 때, 없는 게시글의 좋아요를 취소할 때 { "statusCode": 406, "message": "이미 처리되었습니다.", "error": "Not Acceptable" }
-
-
내가 속해있는 채팅방 목록을 불러오기
-
GET
/chat/roomList
- 쿠키에
accessToken
필요
- 성공 (200)
[ { // socket - chatRoomEntered 이벤트로 인해, 내부적으로 채팅방 생성이 되었지만 메시지 수발신이 없었던 채팅방 // 메시지 수발신이 없었기 때문에 lastMsg필드가 없습니다 "roomId": 10, "targetUserId": "9B8X7YWtA0XlNTBzCItRGmLlUKBYkHdshMPqtsE7sWE", "targetUserNickname": "ktmihs", "unReadCount": 0 }, { "roomId": 1, "targetUserId": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak", "targetUserNickname": "j002", "unReadCount": 2, "lastMsg": { "id": 66, "timestamp": "2022-11-30T15:05:48.448Z", "message": "개인 메시지 입니다.." } } ]
- 실패 (401)
{ // accessToken 권한 없을 때, "statusCode": 401, "message": "Unauthorized" }
-
-
내가 속해있는 채팅방의 채팅 내용을 불러오기
-
GET
/chat/content?targetUserId={상대방 userId}
- Query 필수.
- 쿠키에
accessToken
필요
- 성공(200)
- 채팅 내용들 전부 전송.
[ { "id": 29, // 해당 채팅방 내, chat 고유 id "roomId": 1, // 해당 채팅방 고유 id "timestamp": "2022-11-29T16:11:09.304Z", // 보낸 시각 "message": "감자 감자의 감자 감자의 감자", // 메시지 내용 "senderId": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY" // 보낸 사람 id }, { "id": 30, "roomId": 1, "timestamp": "2022-11-29T16:11:09.304Z", "message": "답장입니다", "senderId": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak" }, { "id": 31, "roomId": 1, "timestamp": "2022-11-29T16:11:09.304Z", "message": "답장입니다2", "senderId": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak" },]
- 실패 (401)
{ // accessToken 권한 없을 때, "statusCode": 401, "message": "Unauthorized" }
-
-
내가 속해있는 채팅방의 채팅 내용을 불러오기
-
GET
/chat/content?targetUserId={상대방 userId}
- Query 필수.
- 쿠키에
accessToken
필요
- 성공(200)
- 채팅 내용들 전부 전송.
[ { "id": 29, // 해당 채팅방 내, chat 고유 id "roomId": 1, // 해당 채팅방 고유 id "timestamp": "2022-11-29T16:11:09.304Z", // 보낸 시각 "message": "감자 감자의 감자 감자의 감자", // 메시지 내용 "senderId": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY" // 보낸 사람 id }, { "id": 30, "roomId": 1, "timestamp": "2022-11-29T16:11:09.304Z", "message": "답장입니다", "senderId": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak" }, { "id": 31, "roomId": 1, "timestamp": "2022-11-29T16:11:09.304Z", "message": "답장입니다2", "senderId": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak" },]
- 실패 (401)
{ // accessToken 권한 없을 때, "statusCode": 401, "message": "Unauthorized" }
-
-
월별 걸음 수 랭킹 불러오기
-
GET
/achievement/walk?year={yyyy}&month={m}&range={’all’ || ‘friend’}
- 쿠키에
accessToken
필요
- 성공 (200)
[ // GET /achievement/walk?year=2022&month=12&range=all { "userid": "9B8X7YWtA0XlNTBzCItRGmLlUKBYkHdshMPqtsE7sWE", "year": 2022, "month": 12, "walkcount": "2525", "nickname": "ktmihs" }, { "userid": "k2526688659", "year": 2022, "month": 12, "walkcount": "22", "nickname": "j00002" }, { "userid": "1NJfqr-aPPEfIJPIvFNd6OzG8qFqTUSRNbT7bxM24R0", "year": 2022, "month": 12, "walkcount": "10", "nickname": "jongbin" } ]
- 성공 (200)
[ // GET /achievement/walk?year=2022&month=12&range=friend { "userid": "k2526688659", "year": 2022, "month": 12, "walkcount": "22", "nickname": "j00002" }, { "userid": "1NJfqr-aPPEfIJPIvFNd6OzG8qFqTUSRNbT7bxM24R0", "year": 2022, "month": 12, "walkcount": "10", "nickname": "jongbin" } ]
- 실패 (401) - 권한 x
{ // accessToken 권한 없을 때, "statusCode": 401, "message": "Unauthorized" }
- 실패 (404) - 불러오기 오류
{ // 에러 "statusCode": 404, "message": "유저들의 걸음 수를 불러올 수 없습니다." }
-
🎮 Interface
- [PATCH] 캐릭터 변경
- [PATCH] 닉네임 변경
- [GET] 친구 목록 조회
- [DELETE] 친구 삭제