User API 문서 - PartyGwam/api GitHub Wiki

User API

기능 : 로그인 및 회원가입, 유저 정보 조회 (프로필이랑 다름)

문서 목차

  1. POST /users/login/
  2. POST /users/
  3. GET /users/
  4. GET /users/<uuid>/
  5. PUT /users/<uuid>/
  6. DELETE /users/<uuid>
  7. POST /users/validate/email/
  8. POST /users/validate/username/

* 표시가 붙은 URL 은 인증 헤더 필요!

POST /users/login/

로그인 기능
클라이언트에 요구하는 정보 : 이메일, 비밀번호 토큰 인증 사용!

Request Format

{
    "email": "[email protected]",
    "password": "sample_password"
}

Response Format - Success

성공 시 다음의 데이터와 함께 200 응답을 리턴.

{
    "success": true,
    "result": {
        "token": "c042f0283ca5277091f5f0223079a8451151d739",
        "uuid": "36671492-b7bd-4ea2-880b-ea3f8c010e82",
        "email": "[email protected]",
        "username": "샘플 유저 1",
        "profile_picture": "assets/images/image_1513232511950_750.jpg"
    },
    "message": null
}

Response Format - Failure

실패 시 에러 메시지와 함께 400 응답을 리턴

{
    "success": false,
    "errors": {
        "non_field_errors": [
            "이메일 혹은 비밀번호가 잘못되었습니다."
        ]
    }
}

POST /users/

회원가입 기능
클라이언트에 요구하는 정보 : 이메일, 닉네임, 비밀번호

Request Format

{
    "email": "[email protected]",
    "username": "sample",
    "password": "sample_password"
}

Response Format - Success

성공 시 다음의 데이터와 함께 201 응답을 리턴.
HTTP 201 코드는 데이터가 생성되었음(created) 을 의미함

{
    "success": true,
    "result": {
        "email": "[email protected]",
        "username": "새로운 유저 4",
        "token": "da3c5edf6e42941b6dd52b0aa41175ed335f2a50",
        "uuid": "cfde09eb-1d5c-4cf7-8a4d-fb7bb11d91cf",
        "profile_picture": null
    },
    "message": null
}

Response Format - Failure

실패 시 실패 사유와 함께 400 에러를 리턴.
실패 사유로는:

  • 이메일이나 닉네임이 이미 존재하는 경우
  • 닉네임이 너무 긴 경우
  • 유효한 이메일 주소가 아닌 경우
  • 비밀번호가 형식에 안 맞는, 너무 간단한 비밀번호인 경우
{
    "success": false,
    "errors": {
        "email": [
            "유효한 이메일 주소를 입력하십시오."
        ]
    }
}

GET /users/ *

전체 유저 조회

Response Format - Success

전체 유저 조회 성공 시 다음의 데이터와 함께 200 응답을 리턴.

  • 기본 페이지 단위는 10
  • 만약 데이터의 개수가 10개보다 많을 경우, 다음 페이지 활성화
{
    "success": true,
    "result": {
        "count": 22,
        "data": [
            {
                "uuid": "36671492-b7bd-4ea2-880b-ea3f8c010e82",
                "email": "[email protected]",
                "username": "샘플 유저 1",
                "date_joined": "2018-06-27T08:41:54.817125+09:00",
                "last_logged_in": "2018-07-01T21:24:48.465996+09:00",
                "is_active": true,
                "is_admin": false
            },
            {
                "uuid": "6a60b481-d40f-4372-9eff-8ba66f7af378",
                "email": "[email protected]",
                "username": "홍길동",
                "date_joined": "2018-07-06T06:21:51.689530+09:00",
                "last_logged_in": "2018-07-06T06:21:51.689575+09:00",
                "is_active": true,
                "is_admin": false
            }
        ],
        "paging": {
            "previous": null,
            "next": "http://127.0.0.1:8000/api/users/?page=2"
        }
    },
    "message": null
}

Response Format - Failure

유저 조회에 실패하는 경우는 Header 에 인증 토큰이 없기 때문
해당 경우 실패 사유와 함께 401 (Unauthorized, 인증되지 않음) 에러 리턴.

{
    "success": false,
    "result": null,
    "message": {
        "detail": "자격 인증데이터(authentication credentials)가 제공되지 않았습니다."
    }
}

GET /users/<uuid>/ *

특정 유저 1 명 조회

Response Format - Success

유저 상세 조회에 성공 시 다음의 데이터와 함께 200 응답을 리턴.

{
    "success": true,
    "result": {
        "uuid": "6a60b481-d40f-4372-9eff-8ba66f7af378",
        "email": "[email protected]",
        "username": "홍길동",
        "date_joined": "2018-07-06T06:21:51.689530+09:00",
        "last_logged_in": "2018-07-06T06:21:51.689575+09:00",
        "is_active": true,
        "is_admin": false
    },
    "message": null
}

Response Format - Failure

유저 상세 조회에 실패 시 실패 사유와 함께 다음의 코드 리턴:

  • 401 : 인증 토큰이 존재하지 않는 경우
  • 403 : 인증 토큰과 사용자가 일치하지 않는 경우 (현재 로그인 된 유저만 상세 조회 가능)
{
    "success": false,
    "result": null,
    "message": {
        "detail": "자격 인증데이터(authentication credentials)가 제공되지 않았습니다."
    }
}

PUT /users/<uuid>/ *

비밀번호 변경

Request Format

{
    "password": "new_password"
}

Response Format - Success

비밀번호 변경에 성공하면 204 (No Content) 응답을 리턴. 응답 데이터는 없음!
(보안상의 이유로 이렇게 설정)

Response Format - Failure

비밀번호 변경에 실패하면 실패 사유와 함께 다음의 응답 코드들을 리턴:

  • 400 : 비밀번호 형식에 맞지 않는 경우 (너무 짧거나, 너무 단순하거나 등)
  • 401 : 인증 토큰이 헤더에 존재하지 않는 경우
  • 403 : 인증 토큰과 사용자가 일치하지 않는 경우 (자기 자신의 비밀번호만 변경 가능)

DELETE /users/<uuid>/ *

유저 비활성화

Request Format

없음. 헤더에 토큰 포함해서 보내기만 하면 됨.

Response Format - Success

유저 비활성화에 성공하면 응답 데이터 없이 204 (No content) 응답을 리턴.

Response Format - Failure

유저 비활성화에 실패하면 실패 사유와 함께 다음의 응답 코드들을 리턴:

  • 401 : 인증 토큰이 헤더에 존재하지 않는 경우
  • 403 : 인증 토큰과 사용자가 일치하지 않는 경우 (자기 자신의 비밀번호만 변경 가능)

POST /users/validate/email/

이메일 실시간 검증

Request Format

{
    "email": "[email protected]"
}

Response Format - Success

이메일 검증에 성공하면 다음의 데이터와 함께 200 응답을 리턴

{
    "success": true,
    "result": {
        "email": "[email protected]"
    },
    "message": null
}

Response Format - Failure

이메일 검증에 실패하면 실패 사유와 함께 400 응답을 리턴.

{
    "success": false,
    "result": null,
    "message": {
        "email": [
            "유저의 이메일은/는 이미 존재합니다."
        ]
    }
}

POST /users/validate/username/

닉네임 실시간 검증

Request Format

{
    "username": "string"
}

Response Format - Success

닉네임 검증에 성공하면 다음의 데이터와 함께 200 응답을 리턴

{
    "success": true,
    "result": {
        "username": "string"
    },
    "message": null
}

Response Format - Failure

닉네임 검증에 실패하면 실패 사유와 함께 400 응답을 리턴

{
    "success": false,
    "result": null,
    "message": {
        "username": [
            "유저의 닉네임은/는 이미 존재합니다."
        ]
    }
}
⚠️ **GitHub.com Fallback** ⚠️