bufs-newclear / PDI-backend

0 stars 0 forks source link

API1 REST 형식 API #2

Open ltlapy opened 7 months ago

ltlapy commented 7 months ago

HTTPS 프로토콜을 통해 접근할 수 있는 API 설계

ltlapy commented 3 months ago

RESTful API 구조

GET    /api/v1/auth/generate
POST   /api/v1/auth/signup
POST   /api/v1/auth/signin
GET    /api/v1/meals
// GET?   /api/v1/reaction (좋아요 등 리액션)
POST   /api/v1/reaction
DELETE /api/v1/reaction

/api/v1/auth/generate

요청

{}

응답

200 OK
{
    "token": "xxxxx"
}

/api/v1/auth/signup

요청

{
    "username": "xxxxxxxxx",
    "password": "xxxxxxxxx",
    "nickname": "xxxxxxxxx"
}

응답

204 OK with no context

/api/v1/auth/signin

요청

{
    "username": "",
    "password": "",
    "nickname": ""
}

응답

200 ok
{
    "access_token": "xxxxxxxxxxx",
    "refresh_token": "xxxxxxxxxxx"
}
401 Unauthorized
{
    "error_id": "INVALID_ID_OR_PASSWORD",
    "message": "인증 정보가 올바르지 않습니다"
}

/api/v1/meals

요청

{
    "scope": "daily" | "weekly",
    "date"?: "xxxx-xx-xx",  // daily에서만 유효?
    "type"?: "morning" | "lunch" | "employee" | "all",
}

응답

200 OK
{
    "meals": [
      {
        //... 식단 json 구조에 따름
      }
    ],
    "lastUpdated": '2024-03-27T08:15:00Z'
}
404 Not found
{
    error_id: 'DATA_NOT_FOUND',
    message: '해당 날짜/구간에 대한 식단 정보가 없습니다.'
}
500 Internal Server Error
{
    error_id: 'INTERNAL_SERVER_ERROR',
    message: '서버에 문제가 발생하였습니다. 관리자에게 문의하십시오.'
}

POST /api/v1/reaction

요청

{
    mealId: 'xxxxxxxxxx',
    user_id: 'xxxxxxxxxx',
}

인증 헤더

{
    'Authorization': 'Bearer xxxxxxxxxx'
}

응답

200 OK
{
    // 식단 json 구조에 따름 + 갱신된 좋아요 정보
}
401 Unauthorized
{
    error_id: 'INVALID_ID_OR_PASSWORD',
    message: '인증 정보가 올바르지 않습니다'
}
404 Not found
{
    error_id: 'MEAL_NOT_FOUND',
    message: '해당 ID에 대한 식단 정보가 없습니다.'
}