# 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": ""
}
}
}
```