Skip to content

Api 명세서 ‐ V1

Gyaak edited this page Oct 11, 2024 · 2 revisions

Login Api

Api 상세

HTTP Method API Endpoint Description
GET /api/auth/login/kakao 카카오 로그인
GET /api/auth/login/naver 네이버 로그인
GET /api/auth/login/google 구글 로그인

Tag Api

요약

HTTP Method API Endpoint Description

[v2로 이관]

Folder Api

요약

HTTP Method API Endpoint Description
GET /api/folders/ 기본 폴더 정보 조회
GET /api/folders/parent/{folderId} 특정 폴더에 속한 폴더 정보 조회
POST /api/folders/ 폴더 생성
PUT /api/folders/{folderId} 폴더 이름 변경

Api 상세

기본 폴더 정보 조회

HTTP Method API Endpoint Description
GET /api/folders/ 기본 폴더 정보 조회
요청예시 응답예시
{
 "userId" : 현재 사용자 id,
 "RECYCLE_BIN" : 휴지통 폴더 id,
 "UNCLASSIFIED" : 미분류 폴더 id,
 "ROOT" : 최상위 폴더 id
}

세부사항

  • 사용자의 기본 폴더 id를 제공
  • 모든 id는 숫자값임

특정 폴더에 속한 폴더 정보 조회

HTTP Method API Endpoint Description
GET /api/folders/parent/{folderId} 특정 폴더에 속한 폴더 정보 조회
요청예시 응답예시
[
 {
  "id" : 2,
  "name" : "폴더이름2",
  "parentFolderId" : 3,
  "userId" : 1
 },
 {
  "id" : 5,
  "name" : "폴더이름5",
  "parentFolderId" : 3,
  "userId" : 1
 }
]

폴더 생성

HTTP Method API Endpoint Description
POST /api/folders/ 폴더 생성
요청예시 응답예시
{
 "name" : "폴더이름"
}
{
 "id" : 1,
 "name" : "폴더이름",
 "parentFolderId" : null,
 "userId" : 1
}

세부사항

  • 현재 생성된 폴더는 임시폴더이므로 PUT /api/structures/folders를 호출하여 적절한 폴더 밑으로 이동시킨후 사용 가능
  • 폴더이름이 중복되면 예외발생
    • 중복은 해당 사용자가 등록한 폴더명에서만 체크

폴더 이름 변경

HTTP Method API Endpoint Description
PUT /api/folders/{folderId} 폴더 이름 변경
요청예시 응답예시
{
 "name" : "폴더이름"
}

세부사항

  • 중복된 이름으로 변경시 예외 발생
    • 중복은 해당 사용자가 등록한 폴더명에서만 체크

Pick Api

요약

HTTP Method API Endpoint Description
GET /api/picks/{pickId} 픽 상세 정보 조회
GET /api/picks 본인 폴더 픽 리스트 조회
GET /api/picks?parentId=1 부모 폴더 픽 리스트 조회
GET /api/picks?folderType=UNCLASSIFIED 미분류 폴더 픽 리스트 조회
POST /api/picks 픽 생성(미분류 폴더로 생성), 이동하고 싶으면 이동 요청하기
PUT /api/picks 픽(제목, 메모, 태그) 수정
DELETE /api/picks 픽 삭제

Api 상세

픽 상세 정보 조회

HTTP Method API Endpoint Description
GET /api/picks/{pickId} 픽 상세 정보 조회
요청예시 응답예시
{
 "id": 2,
 "title": "제목",
 "memo": "메모",
 "folderId": 1,
 "userId": 1,
 "tagList": [
  {
   "tagId": 1,
   "tagName": "tag1",
   "tagOrder": 0,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 2,
   "tagName": "tag2",
   "tagOrder": 1,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 3,
   "tagName": "tag3",
   "tagOrder": 2,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 4,
   "tagName": "tag4",
   "tagOrder": 3,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 5,
   "tagName": "tag5",
   "tagOrder": 4,
   "colorNumber": 0,
   "userId": 1
  }
 ],
 "linkUrlResponse": {
  "id": 2,
  "url": "title",
  "imageUrl": null
 }
}

본인 폴더 픽 리스트 조회

HTTP Method API Endpoint Description
GET /api/picks 본인 폴더 픽 리스트 조회
요청예시 응답예시
[
 {
  "id": 2,
  "title": "제목",
  "memo": "메모",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 2,
    "tagName": "tag2",
    "tagOrder": 1,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 5,
    "tagName": "tag5",
    "tagOrder": 4,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 2,
   "url": "title",
   "imageUrl": null
  }
 },
 {
  "id": 3,
  "title": "string",
  "memo": "string",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 1,
   "url": "string",
   "imageUrl": "string"
  }
 }
]

|


부모 폴더 픽 리스트 조회

HTTP Method API Endpoint Description
GET /api/picks?parentId=1 부모 폴더 픽 리스트 조회
요청예시 응답예시
[
 {
  "id": 2,
  "title": "제목",
  "memo": "메모",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 2,
    "tagName": "tag2",
    "tagOrder": 1,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 5,
    "tagName": "tag5",
    "tagOrder": 4,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 2,
   "url": "title",
   "imageUrl": null
  }
 },
 {
  "id": 3,
  "title": "string",
  "memo": "string",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 1,
   "url": "string",
   "imageUrl": "string"
  }
 }
]

미분류 폴더 픽 리스트 조회

HTTP Method API Endpoint Description
GET /api/picks?folderType=UNCLASSIFIED 미분류 폴더 픽 리스트 조회
요청예시 응답예시
[
 {
  "id": 2,
  "title": "제목",
  "memo": "메모",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 2,
    "tagName": "tag2",
    "tagOrder": 1,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 5,
    "tagName": "tag5",
    "tagOrder": 4,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 2,
   "url": "title",
   "imageUrl": null
  }
 },
 {
  "id": 3,
  "title": "string",
  "memo": "string",
  "folderId": 1,
  "userId": 1,
  "tagList": [
   {
    "tagId": 3,
    "tagName": "tag3",
    "tagOrder": 2,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 4,
    "tagName": "tag4",
    "tagOrder": 3,
    "colorNumber": 0,
    "userId": 1
   },
   {
    "tagId": 1,
    "tagName": "tag1",
    "tagOrder": 0,
    "colorNumber": 0,
    "userId": 1
   }
  ],
  "linkUrlResponse": {
   "id": 1,
   "url": "string",
   "imageUrl": "string"
  }
 }
]

픽 생성

HTTP Method API Endpoint Description
POST /api/picks 픽 생성(미분류 폴더로 생성), 이동하고 싶으면 이동 요청하기
요청예시 응답예시
{
 "memo": "메모",
 "title": "제목",
 "tagIdList": [
  3, 1, 2
 ],
 "linkRequest": {
  "url": "/url",
  "title": "링크 제목",
  "description": "링크 설명",
  "imageUrl": "/imageUrl"
 }
}
{
 "id": 4,
 "title": "제목",
 "memo": "메모",
 "folderId": 1,
 "userId": 1,
 "tagList": [
  {
   "tagId": 3,
   "tagName": "tag3",
   "tagOrder": 2,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 1,
   "tagName": "tag1",
   "tagOrder": 0,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 2,
   "tagName": "tag2",
   "tagOrder": 1,
   "colorNumber": 0,
   "userId": 1
  }
 ],
 "linkUrlResponse": {
  "id": 3,
  "url": "링크 제목",
  "imageUrl": null
 }
}

세부 사항

  • 응답은 우선 모든 정보를 담아두었음.
  • 클라이언트 측에서 생성되었을 때 데이터가 필요없다고 판단되는 경우 응답은 제거할 수 있음.

픽 수정

HTTP Method API Endpoint Description
PUT /api/picks 픽(제목, 메모, 태그) 수정
요청예시 응답예시
{
 "id": 2,
 "title": "제목제목",
 "memo": "메모메모",
 "tagIdList": [
  1, 3, 4
 ]
}
{
 "id": 2,
 "title": "제목제목",
 "memo": "메모메모",
 "folderId": 1,
 "userId": 1,
 "tagList": [
  {
   "tagId": 1,
   "tagName": "tag1",
   "tagOrder": 0,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 3,
   "tagName": "tag3",
   "tagOrder": 2,
   "colorNumber": 0,
   "userId": 1
  },
  {
   "tagId": 4,
   "tagName": "tag4",
   "tagOrder": 3,
   "colorNumber": 0,
   "userId": 1
  }
 ],
 "linkUrlResponse": {
  "id": 2,
  "url": "title",
  "imageUrl": null
 }
}

세부 사항

  • 응답은 우선 모든 정보를 담아두었음.
  • 클라이언트 측에서 생성되었을 때 데이터가 필요없다고 판단되는 경우 응답은 제거할 수 있음.

픽 삭제

HTTP Method API Endpoint Description
DELETE /api/picks 픽 삭제
요청예시 응답예시
{
 "id": 2
}

StructureApi

요약

HTTP Method API Endpoint Description
GET /api/structures/ 사용자 폴더구조 조회
PUT /api/structures/folders/{folderId} 폴더 이동
PUT /api/structures/picks/{pickId} 픽 이동
DELETE /api/structures/folders/{folderId} 폴더 삭제
DELETE /api/structures/picks/{pickId} 픽 삭제

Api 상세

사용자 폴더구조 조회

HTTP Method API Endpoint Description
GET /api/structures/ 사용자 폴더구조 조회
요청예시 응답예시
{
 "root": [
  {
   "id": "1",
   "type": "folder"
   "folderId": 1,
   "name": "Favorites",
   "children": []
  },
  {
   "id": "2",
   "type": "folder",
   "folderId": 5,
   "name": "Frontend",
   "children": [
    {
     "id": "3",
     "type": "pick",
     "pickId": 3,
     "name": "React Hooks"
    }
   ]
  }
 ],
 "recycleBin": []
}

세부사항

  • id는 클라이언트에서 사용하는 id값, 서버에서는 folderId, pickId만 사용
  • type : folder|pick
  • 사용자의 폴더 구조를 제공
  • 최소 회원가입시 다음과 같은 기본 폴더구조를 반환
{
  "root": [],
  "recycleBin": []
}

폴더 이동

HTTP Method API Endpoint Description
PUT /api/structures/folders/{folderId} 폴더 이동
요청예시 응답예시
{
 "parentFolderId": 이동 목적지 폴더 id,
 "structure": {
  "root": [
   {
    "id": 2,
    "type": "folder",
    "folderId": 7,
    "name": "폴더 이름",
    "children": []
   }
  ],
  "recycleBin": []
 }
}

세부사항

  • structure의 경우 폴더를 이동한 후의 폴더구조 를 json트리 형태로 보내줘야함

픽 이동

HTTP Method API Endpoint Description
PUT /api/structures/picks/{pickId} 픽 이동
요청예시 응답예시
{
 "parentFolderId": 이동 목적지 폴더 id,
 "structure": {
  "root": [
   {
    "id": 2,
    "type": "pick",
    "pickId": 7,
    "name": "픽 이름"
   }
  ],
  "recycleBin": []
 }
}

세부사항

  • structure의 경우 픽을 이동한 후의 폴더구조 를 json트리 형태로 보내줘야함

폴더 삭제

HTTP Method API Endpoint Description
DELETE /api/structures/folders/{folderId} 폴더 삭제
요청예시 응답예시
{
 "structure": {
  "root": [
   {
    "id": 2,
    "type": "folder",
    "folderId": 7,
    "name": "폴더 이름",
    "children": []
   }
  ],
  "recycleBin": []
 }
}

세부사항

  • structure의 경우 폴더를 삭제한 후의 폴더구조 를 json트리 형태로 보내줘야함

픽 삭제

HTTP Method API Endpoint Description
DELETE /api/structures/picks/{pickId} 픽 삭제
요청예시 응답예시
{
 "structure": {
  "root": [
   {
    "id": 2,
    "type": "pick",
    "pickId": 7,
    "name": "픽 이름"
   }
  ],
  "recycleBin": []
 }
}

세부사항

  • structure의 경우 픽을 삭제한 후의 폴더구조 를 json트리 형태로 보내줘야함