Skip to content

API 명세

강성준 edited this page Nov 30, 2022 · 30 revisions

😀 User

로그인

  • 소셜 로그인
  • 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

    응답

    • nicknamecharacterName 반환
    • 성공 (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명
        {
            "nickname": "hungjin",
            "characterName": "lion"
        },
        {
            "nickname": "hj",
            "characterName": "lion"
        }
    ]
    
    
     []// 팔로잉 0명
    
    

닉네임으로 팔로우 신청

  • PUT /friendship/{상대닉네임} 으로 요청

    요청

    • PUT /friendship/{상대닉네임}

    응답

    • 성공 (200)
    "팔로우 성공"
    
    
    • 실패 (404)
    {
         "statusCode": 404,
         "message": "이미 팔로우한 유저입니다.",
         "error": "Not Found"
    }
    
    

닉네임으로 팔로우 취소

  • DELETE /friendship/{상대닉네임} 으로 요청

    요청

    • DELETE /friendship/{상대닉네임}

    응답

    • 성공 (200)
    "팔로우 성공"
    
    
    • 실패 (404)
    {
        "statusCode": 404,
        "message": "팔로우 취소 실패",
        "error": "Not Found"
    }
    
    

👨‍👩‍👧‍👦 공유 (SleepyBoard)

게시글 조회

  • 내가 Following 한 유저들의 게시글만 불러오기. (최신순)

    요청

    • GET /board 로 요청

    응답

    • 성공 (200)
    [
        {
            "id": 2,
            "nickname": "stouter",
            "content": "너무 좋아요",
            "category": "fishing",
            "created_at": "2022-11-23T13:57:44.356Z"
        },
        {
            "id": 1,
            "nickname": "stouter",
            "content": "너무 좋아요",
            "category": "lifencut",
            "created_at": "2022-11-23T13:49:51.475Z"
        }
    ]
    
    
    [] // 팔로잉 유저 없음 || 팔로잉 유저들 게시글 없음
    
    

게시글 작성

  • 게임 혹은 서비스 중 공유하기 버튼으로 요청

    요청

    • POST /boardarticleData 와 함께 요청
    {
    	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)
    [
        {
            "roomId": 2,   // 채팅방 고유 번호
            "unreadCount": 0,  // 내가 읽지 않은 메시지 (새 메시지)
            "targetUserId": "9B8X7YWtA0XlNTBzCItRGmLlUKBYkHdshMPqtsE7sWE" //상대방 유저 id
        },
        {
            "roomId": 1,
            "unreadCount": 0,
            "targetUserId": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY"
        }
    ]
    
    • 실패 (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"
    }
    

🎮 Interface

  • [PATCH] 캐릭터 변경
  • [PATCH] 닉네임 변경
  • [GET] 친구 목록 조회
  • [DELETE] 친구 삭제
Clone this wiki locally