****# Kakao Tech Gift API 명세서
- 제목: Kakao Tech Gift API
- 버전: 1.0
- 기본 URL:
http://localhost:3000 - 문서 URL:
/api-docs
{
"data": {
// API별 응답 데이터
}
}{
"data": {
"status": "ERROR_TYPE",
"statusCode": 400,
"message": "에러 메시지"
}
}- URL:
/ping - Method: GET
- 설명: 서버의 상태를 확인합니다.
- 성공 응답 (200):
{ "data": "pong~!@#$%^&*()" } - Curl 예제:
curl -X GET http://localhost:3000/ping
- URL:
/api/login - Method: POST
- 설명: 이메일과 비밀번호로 로그인합니다.
- 요청 본문:
{ "email": "user@kakao.com", "password": "password123" } - 요청 제약사항:
- email: @kakao.com 이메일 주소만 가능
- password: 8자 이상
- 성공 응답 (200):
{ "data": { "email": "user@kakao.com", "name": "user", "authToken": "dummy-token" } } - 에러 응답 (400):
- 잘못된 이메일 형식
- 잘못된 비밀번호 형식
- 필수 입력값 누락
- Curl 예제:
curl -X POST http://localhost:3000/api/login \ -H "Content-Type: application/json" \ -d '{ "email": "user@kakao.com", "password": "password123" }'
- URL:
/api/themes - Method: GET
- 설명: 모든 테마의 기본 정보를 조회합니다.
- 성공 응답 (200):
{ "data": [ { "themeId": 1, "name": "테마명", "image": "이미지 URL" } ] } - Curl 예제:
curl -X GET http://localhost:3000/api/themes
- URL:
/api/themes/:themeId/info - Method: GET
- 설명: 특정 테마의 상세 정보를 조회합니다.
- URL 파라미터:
- themeId: 테마 ID (number)
- 성공 응답 (200):
{ "data": { "themeId": 1, "name": "테마명", "title": "테마 제목", "description": "테마 설명", "backgroundColor": "배경색 코드" } } - 에러 응답 (404):
- 해당 ID에 일치하는 데이터가 없는 경우
- Curl 예제:
curl -X GET http://localhost:3000/api/themes/1/info
- URL:
/api/themes/:themeId/products - Method: GET
- 설명: 특정 테마의 상품 목록을 페이지네이션으로 조회합니다.
- URL 파라미터:
- themeId: 테마 ID (number)
- 쿼리 파라미터:
- cursor: 커서 (기본값: 0)
- limit: 한 페이지당 조회할 상품 수 (기본값: 10)
- 성공 응답 (200):
{ "data": { "list": [ { "id": 11526198, "name": "상품명", "price": { "basicPrice": 39000, "sellingPrice": 39000, "discountRate": 0 }, "imageURL": "https://example.com/image.jpg", "brandInfo": { "id": 33, "name": "브랜드명", "imageURL": "https://example.com/brand.jpg" } } ], "cursor": 10, "hasMoreList": true } } - 에러 응답 (404):
- 해당 테마를 찾을 수 없는 경우
- Curl 예제:
curl -X GET "http://localhost:3000/api/themes/1/products?cursor=0&limit=10"
- URL:
/api/products/:productId - Method: GET
- 설명: 특정 상품의 기본 정보를 조회합니다.
- URL 파라미터:
- productId: 상품 ID (number)
- 성공 응답 (200):
{ "data": { "id": 11526198, "name": "상품명", "price": { "basicPrice": 39000, "sellingPrice": 39000, "discountRate": 0 }, "imageURL": "https://example.com/image.jpg", "brandInfo": { "id": 33, "name": "브랜드명", "imageURL": "https://example.com/brand.jpg" } } } - 에러 응답 (404):
- 존재하지 않는 상품인 경우
- Curl 예제:
curl -X GET http://localhost:3000/api/products/11526198
- URL:
/api/products/:productId/detail - Method: GET
- 설명: 특정 상품의 상세 정보를 조회합니다.
- URL 파라미터:
- productId: 상품 ID (number)
- 성공 응답 (200):
{ "data": { "description": "상품 상세 설명", "announcement": [ { "name": "발행자", "value": "(주)카카오", "displayOrder": 1 }, { "name": "교환권 공급자", "value": "(주)섹타나인", "displayOrder": 2 } ] } } - Curl 예제:
curl -X GET http://localhost:3000/api/products/11526198/detail
- URL:
/api/products/:productId/wish - Method: GET
- 설명: 특정 상품의 찜 정보를 조회합니다.
- URL 파라미터:
- productId: 상품 ID (number)
- 성공 응답 (200):
{ "data": { "wishCount": 123, "isWished": false } } - Curl 예제:
curl -X GET http://localhost:3000/api/products/11526198/wish
- URL:
/api/products/:productId/highlight-review - Method: GET
- 설명: 특정 상품의 하이라이트 리뷰를 조회합니다.
- URL 파라미터:
- productId: 상품 ID (number)
- 성공 응답 (200):
{ "data": { "totalCount": 123, "reviews": [ { "id": "683a610f618cb6387dd3d28d", "authorName": "다정한 어피치", "content": "넘맛나요. 두가지맛을 한번에 생일케익 으로 최고네요~~" }, { "id": "684b7c63370ed53d817e4be9", "authorName": "let it be..!", "content": "반반하려다가..\n전부고구마로된 케익을 선택했는데..모두들 만족했답니다..!~^^" } ] } } - Curl 예제:
curl -X GET http://localhost:3000/api/products/11526198/highlight-review
- URL:
/api/products/:productId/summary - Method: GET
- 설명: 특정 상품의 요약 정보를 조회합니다.
- URL 파라미터:
- productId: 상품 ID (number)
- 성공 응답 (200):
{ "data": { "id": 11526198, "name": "스트로베리 초콜릿 생크림", "brandName": "투썸플레이스", "price": 39000, "imageURL": "https://example.com/image.jpg" } } - 에러 응답 (404):
- 현재 없는 상품인 경우
- Curl 예제:
curl -X GET http://localhost:3000/api/products/11526198/summary
- URL:
/api/products/ranking - Method: GET
- 설명: 상품 랭킹을 조회합니다.
- 쿼리 파라미터:
- targetType: 대상 타입 (기본값: "ALL")
- ALL: 전체
- FEMALE: 여성
- MALE: 남성
- TEEN: 10대
- rankType: 랭킹 타입 (기본값: "MANY_WISH")
- MANY_WISH: 많이 찜한
- MANY_RECEIVE: 많이 받은
- MANY_WISH_RECEIVE: 많이 찜하고 받은
- targetType: 대상 타입 (기본값: "ALL")
- 성공 응답 (200):
{ "data": [ { "id": 11526198, "name": "스트로베리 초콜릿 생크림", "price": { "basicPrice": 39000, "sellingPrice": 39000, "discountRate": 0 }, "imageURL": "https://example.com/image.jpg", "brandInfo": { "id": 33, "name": "투썸플레이스", "imageURL": "https://example.com/brand.jpg" } } ] } - 에러 응답 (400):
- 잘못된 targetType 또는 rankType인 경우
- Curl 예제:
curl -X GET "http://localhost:3000/api/products/ranking?targetType=ALL&rankType=MANY_WISH"
- URL:
/api/order - Method: POST
- 설명: 새로운 주문을 생성합니다.
- 헤더:
- Authorization: "dummy-token" (로그인 후 받은 토큰)
- 요청 본문:
{ "productId": 11526198, "message": "생일 축하해!", "messageCardId": "card123", "ordererName": "김주문", "receivers": [ { "name": "홍길동", "phoneNumber": "010-1234-5678", "quantity": 1 } ] } - 요청 제약사항:
- productId: 양수
- message: 필수 입력값
- messageCardId: 필수 입력값
- ordererName: 필수 입력값
- receivers: 배열이며 최소 1개 이상
- receivers.name: 필수 입력값
- receivers.phoneNumber: 필수 입력값
- receivers.quantity: 양수
- 성공 응답 (201):
{ "data": { "success": true } } - 에러 응답:
- 401: 로그인이 필요합니다 (토큰 누락 또는 잘못된 토큰)
- 400: 받는 사람이 없습니다 (receivers 배열이 비어있는 경우)
- 400: 유효성 검사 실패
- Curl 예제:
curl -X POST http://localhost:3000/api/order \ -H "Content-Type: application/json" \ -H "Authorization: dummy-token" \ -d '{ "productId": 11526198, "message": "생일 축하해!", "messageCardId": "card123", "ordererName": "김주문", "receivers": [ { "name": "홍길동", "phoneNumber": "010-1234-5678", "quantity": 1 } ] }'
- 400: 잘못된 요청 (BAD_REQUEST)
- 401: 인증 실패 (UNAUTHORIZED)
- 403: 접근 권한 없음 (FORBIDDEN)
- 404: 리소스를 찾을 수 없음 (NOT_FOUND)
- 409: 리소스 충돌 (CONFLICT)
- 500: 서버 내부 오류 (INTERNAL_SERVER_ERROR)