---
# System prepended metadata

title: Glory Server API

---

# Glory Server API
### date: 2022-10-17, version: 0.1.0

## 공통
* 개발서버: https://dev-api.gloryapi.net/ ~~
* 운영서버: https://api.gloryapi.net/ ~~ (아직 미배포)
* 헬스체크 URL: https://dev-api.gloryapi.net/public-api/v1/health
* URL 이 /public-api 로 시작하면 인증토큰(jwt)이 필요없는 경우, /api 로 시작하면 인증토큰(jwt)이 필요한 경우
* Content-Type: application/json 으로 고정해주세요.
* Http header Authorization: Bearer {JWT} 형식을 사용합니다.
* 실패시에는
    * 에러코드(code) | 에러메시지(messsage) | client action
    * 400 | 클라이언트 호출 오류로써 대부분 파라미터 오류 | 파라미터 확인
    * 401 | 인증실패 오류 | 로그인을 다시해서 JWT를 다시 받아야 함 
    * 403 | 미인가 오류 | 로그인을 다시해서 JWT를 다시 받아야 함 
    * 500 | 서버오류 | 서버오류로써 서버로그를 확인해야 함 (저에게 연락주세요)
* 클라이언트의 실수로 오류가나면 400 을 리턴, 인증오류는 401, 미인가접근 403, 서버오류는 500을 리턴합니다.
* 아래와 같은 포맷을 유지합니다.

```
{"code":"에러코드","message":"에러메시지"}

```
## 1. 회원가입
* 회원가입을 하고 성공하면 jwt를 리턴한다.
* 회원가입 성공후 로그인으로 튕겨서 다시 로그인하게 할수도 있는데 우선 성공하면 jwt 를 리턴하도록 합니다.

### POST /public-api/v1/join

```
{
    "id": "test-user-1",            # 회원 아이디 (로그인 시에 사용)
    "password": "abcd",             # 비밀번호 (로그인 시에 사용)
    "name": "홍길동",                 # 성명
    "nickname": "oracleman",        # 닉네임
    "email": "abc@gmail.com"        # 이메일
}
```
### 성공 200 OK
* jwt 를 리턴하며 개발서버는 TTL 2시간 적용, 운영서버는 60일적용

```
{
  "data": {
    "result": "ok",   # 성공응답 보조결과. 아래 `token` 이 존재하면 성공이지만 클라이언트에서 성공여부에 대한 판단의 용이성을 위한 리턴값. 실패이면 400,401,500 오류를 리턴하며 위 형식참고
    "token": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiIyIiwiaWF0IjoxNjYyODA2MzY5LCJleHAiOjE2NjI4MTM1NjksImlzcyI6ImNvbS5zbWFydGgiLCJsb2dpbkNoYW5uZWwiOiJpZF9wdyJ9.Uti8P-dps6Ke_J-852g9eVylCa6GqGZU-ZOvGFCSMlXbTKpbvnnBlVeeZnRNr4PV"    # JWT
  }
}
```
### 400 Bad Request
* 올바른 파라미터 형식이 아니면 오류 리턴

```
{
  "code": "400",
  "message": "유효하지 않은 파라미터입니다."
}
```
### 400 Bad Request
* id 기준으로 이미 가입되어 있다면 아래와 같은 오류 리턴

```
{
  "code": "400",
  "message": "이미 존재하는 유저입니다. memberId: test-user-1"
}
```

## 2. 로그인
* id, password 로 로그인하고 성공하면 jwt 를 리턴한다.

### POST /public-api/v1/login
```
{"id":"test-user-1","password":"패스워드 값"}
```

### 성공 200 OK
* jwt 를 리턴하며 개발서버는 TTL 2시간 적용, 운영서버는 60일적용
```
{
  "data": {
    "result": "ok",
    "token": "eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiIyIiwiaWF0IjoxNjYyODA5NzY4LCJleHAiOjE2NjI4MTY5NjgsImlzcyI6ImNvbS5zbWFydGgiLCJsb2dpbkNoYW5uZWwiOiJpZF9wdyJ9.MmdezYSQhn8rNstwTtcGzWmCO7fO2-_Qp3swOOcFQEEo_GnOHv-UrdMVSOwNo-a8"
  }
}
```
### 실패 400 Bad Request
* id 혹은 password 가 일치하지 않는 경우
```
{
  "code": "400",
  "message": "ID/PASSWORD 정보가 일치하지 않습니다 !"
}
```

## 3. JWT 유효성 검사
* JWT 가 유효한지 여부를 판단하기 위한 API
* 필수헤더: Authorization 
* 파라미터 없음.
* 인증된 사용자에 대한 비즈니스 로직 실행전에 체크용도로 사용할 수 있음.

### GET /api/v1/check_login

### 성공 200 OK
```
{
  "data": {
    "result": "ok"
  }
}
```
### 실패 403 Forbidden
* 대부분 키가 만료 된 경우로써 다시 /login 해야함.
```
{
  "code": "403",
  "message": "Full authentication is required to access this resource"
}
```

## 4. 프로필 조회 
* 필수헤더: Authorization
    * Authroization : Bearer ${JWT토큰}
* 파라미터 없음

### GET /api/v1/profile

### 성공 200 OK

```
{
  "data": {
    "result": "ok",
    "profile": {
      "id": "test001",
      "name": "홍길동",
      "nickname": "홍길똥",
      "email": "yoe21@gmail.com",
      "point": 1000,
      "todayLogin": "2022-10-17 14:12:05",
      "datetime": "2022-10-17 14:12:05",
      "homepage": ""
    }
  }
}

```
