Skip to content
Youjin Lee edited this page Apr 28, 2021 · 2 revisions

API 문서

0. access token & refresh token

accessToken

- 서버에서 보낼 땐 req.body에 담아주세요

- 클라이언트에서 보낼땐 req.headers['authorization']에 담아주세요

  • iat: 토큰 발급 일자
  • exp: 토큰 만료 시간
  • userId (or guestId)
  • nickname (only LoginUser)
  • email (only LoginUser)

refreshToken

- req.cookies 에 담아서 보내드립니다. 로그아웃 시 클라이언트에서 쿠키 삭제해주세요.

  • iat
  • exp
  • userId (or guestId)

1. 로그인 - /login

1) POST /login

로그인 요청을 받으면, 사용자를 데이터베이스에서 확인하고 토큰을 발급한다

Request

{
	email: email (string),
	password: password (string)
}

⚠️ 패스워드는 암호화해서 보낼 것

Response

  1. 200: ok

    coockie 옵션: sameSite: none, httpOnly: true, secure: true

    // cookie
    {
        refreshToken: refreshToken
    }
    
    // payload
    {
        data: {accessToken: accessToken},
        message: 'ok'
    }
  2. 404: Not Found

    사용자의 이메일이나 비밀번호가 틀린 경우

    {
    	message: '이메일 또는 비밀번호를 찾을 수 없습니다.'
    }

2) 소셜로그인 - /kakaologin, /facebooklogin, /googlelogin

=> 소셜 로그인 구현하면서 추가 예정

2. 로그아웃 - /logout

⇒ 클라이언트 쪽에서 accessToken과 refreshToken 삭제

3. 회원가입 - /register

1) POST /register

회원가입 요청

Request

{
	email: email(string),
	password: password(string),
	nickname: nickname(string),
}

⚠️ 패스워드는 암호화해서 보낼 것. - 암호화에 대해서는 클라이언트와 협의 필요

Response

  1. 201: Created

    // payload
    {
        message: 'created'
    }
  2. 422: Unprocessable Enitity

    이메일, 패스워드, 닉네임 중 빈칸이 있는 경우

    {
    	message: '누락된 값이 있습니다.'
    }
  3. 409: Conflict

    이메일이 이미 있는 경우

    {
    	message: '해당 이메일은 이미 존재합니다.'
    }

4. 게스트 참여 - /guest

1) GET /guest

게스트에게 임시 아이디를 발급하고, 웨이팅룸으로 리다이렉션

Response

  1. 200: ok

    coockie 옵션: sameSite: none, httpOnly: true, secure: true

    // cookie
    {
        refreshToken: refreshToken
    }
    
    // payload
    {
        data: {accessToken: accessToken},
        message: 'ok'
    }

5. 방 만들기 & 방 참여하기 - /room

1) 방 만들기 - POST /room/new

방 이름을 보내면 해당 방을 만들고 해당 방으로 입장시킨다

Request

// request header
{
	authorization: accessToken
}

// payload
{
	room_name: room_name (string)
}

Response

  1. 200: ok

    데이터베이스 갱신 & 사용자 리다이렉팅

    // payload
    {
        message: 'ok'
    }
  2. 401: Unauthorized

    로그인하지 않은 사용자(=req.headers.authorization에 accessToken이 없는)인 경우

    {
    	message: '로그인하지 않은 사용자입니다.'
    }

2) 방 참여하기 - POST /room/join

기존에 만들어진 방에 참여한다.

Request

// request header
{
	authorization: accessToken
}
// payload
{
	room_name: null,
	room_id: null 
	// 후에 기능 추가해서 특정 방에 들어가고자 하는 경우를 위해 일단 넣어둠.
	// bare minimum에서는 null로 설정하면 랜덤으로 방에 들어감
}

Response

  1. 200: ok

    // payload
    {
        message: 'ok'
    }
  2. **404: Not Found**

    방이 하나도 없는 경우

    {
    	message: '만들어진 방이 없습니다.'
    }

6. 마이페이지 - /mypage/:userid

1) 유저의 팔로워 목록 - GET /mypage/:userid/followers

유저의 팔로워 목록을 가져온다. 각 팔로워의 id, email, nickname, profile을 가져온다.

Response

  1. 200: ok

    // payload
    {
       data: {
    		followers: [
    			{ id, email, nickname, profile_image },
    			{ id, email, nickname, profile_image },
    			...
    		]
    	},
    	message: 'ok'
    }

2) 유저의 팔로잉 목록 - GET /mypage/:userid/followings

Response

  1. 200: ok

    // payload
    {
       data: {
    		followings: [
    			{ id, email, nickname, profile_image },
    			{ id, email, nickname, profile_image },
    			...
    		]
    	},
    	message: 'ok'
    }

3) 특정 이메일을 가진 유저 팔로우 - POST /mypage/:userid/follow

특정 이메일을 가진 유저를 팔로우한다.

Request

// request header
{
	authorization: accessToken
}
// payload
{
	email: email  // 팔로우 할 이메일
}

Response

  1. 200: ok

    갱신된 팔로잉 목록을 리턴한다

    // payload
    {
       data: {
    		followers: [
    			{ id, email, nickname, profile_image },
    			{ id, email, nickname, profile_image },
    			...
    		]
    	},
    	message: 'ok'
    }
  2. 404: Not Found

    해당 이메일을 사용한 유저를 찾지 못한 경우

    // payload
    {
    	message: '해당 이메일을 사용하는 유저가 없습니다.'
    }

4) 유저 언팔로우 - POST /mypage/:userid/unfollow

기존에 팔로우하던 유저를 언팔로우한다.

Request

// request header
{
	authorization: accessToken
}
// payload
{
	email: email
}

Response

  1. 200: ok

    갱신된 팔로잉 목록을 리턴한다

    // payload
    {
       data: {
    		followers: [
    			{ id, email, nickname, profile_image },
    			{ id, email, nickname, profile_image },
    			...
    		]
    	},
    	message: 'ok'
    }
  2. 404: Not Found

    팔로우 하고 있지 않던 유저를 언팔로우 하는 경우

    // payload
    {
    	message: '팔로우하지 않은 유저를 언팔로우할 수 없습니다.'
    }

5) 비밀번호 변경 - POST /mypage/:userid/newpwd

비밀번호를 변경한다

Request

// request header
{
	authorization: accessToken
}
// payload
{
	oldpwd: oldpwd, // 기존 패스워드
	newpwd: newpwd  // 바꾸고 싶은 패스워드
}

⚠️ 패스워드는 암호화해서 보낼 것

Response

  1. 200: ok

    // payload
    {
    	message: 'ok'
    }
  2. 401: Unauthorized

    기존 패스워드를 틀린 경우

    // payload
    {
    	message: '기존 패스워드를 잘 못 입력하셨습니다.'
    }
  3. 422: Unprocessable Enitity

    새 비밀번호를 공란으로 둔 경우

    // payload
    {
    	message: '패스워드는 공란으로 둘 수 없습니다.'
    }

7. 이메일로 사용자 검색 - GET /users/search?email={EMAIL}

이메일을 통해 사용자를 검색한다.

Response

  1. 200: ok

    해당 이메일을 가진 유저 정보를 리턴한다

    // payload
    {
       data: {
    		userInfo: {
    			id: id,
    			email: email,
    			nickname: nickname
    			profile_image: profile_image
    		}
    	},
    	message: 'ok'
    }
  2. 404: Not Found

    해당 이메일을 사용한 유저를 찾지 못한 경우

    // payload
    {
    	message: '해당 이메일을 사용하는 유저가 없습니다.'
    }