상품

전체 상품 목록 조회

페이지 별로 상품 목록 조회 가능 페이지 당 9개의 상품이 리턴 된다.

쿼리 스트링

Parameter Description

page

첫 페이지는 0(default: 0)

요청 예시

GET /products?page=0 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : true,
  "response" : [ {
    "id" : 1,
    "productName" : "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
    "description" : "",
    "image" : "/images/1.jpg",
    "price" : 1000
  }, {
    "id" : 2,
    "productName" : "[황금약단밤 골드]2022년산 햇밤 칼집밤700g외/군밤용/생율",
    "description" : "",
    "image" : "/images/2.jpg",
    "price" : 2000
  }, {
    "id" : 3,
    "productName" : "삼성전자 JBL JR310 외 어린이용/성인용 헤드셋 3종!",
    "description" : "",
    "image" : "/images/3.jpg",
    "price" : 30000
  }, {
    "id" : 4,
    "productName" : "바른 누룽지맛 발효효소 2박스 역가수치보장 / 외 7종",
    "description" : "",
    "image" : "/images/4.jpg",
    "price" : 4000
  }, {
    "id" : 5,
    "productName" : "[더주] 컷팅말랑장족, 숏다리 100g/300g 외 주전부리 모음 /중독성 최고/마른안주",
    "description" : "",
    "image" : "/images/5.jpg",
    "price" : 5000
  }, {
    "id" : 6,
    "productName" : "굳지않는 앙금절편 1,050g 2팩 외 우리쌀떡 모음전",
    "description" : "",
    "image" : "/images/6.jpg",
    "price" : 15900
  }, {
    "id" : 7,
    "productName" : "eoe 이너딜리티 30포, 오렌지맛 고 식이섬유 보충제",
    "description" : "",
    "image" : "/images/7.jpg",
    "price" : 26800
  }, {
    "id" : 8,
    "productName" : "제나벨 PDRN 크림 2개. 피부보습/진정 케어",
    "description" : "",
    "image" : "/images/8.jpg",
    "price" : 25900
  }, {
    "id" : 9,
    "productName" : "플레이스테이션 VR2 호라이즌 번들. 생생한 몰입감",
    "description" : "",
    "image" : "/images/9.jpg",
    "price" : 797000
  } ],
  "error" : null
}

개별 상품 상세 조회

요청 예시

GET /products/1 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : true,
  "response" : {
    "id" : 1,
    "productName" : "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
    "description" : "",
    "image" : "/images/1.jpg",
    "price" : 1000,
    "starCount" : 5,
    "options" : [ {
      "id" : 1,
      "optionName" : "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
      "price" : 10000
    }, {
      "id" : 2,
      "optionName" : "02. 슬라이딩 지퍼백 플라워에디션 5종",
      "price" : 10900
    }, {
      "id" : 3,
      "optionName" : "고무장갑 베이지 S(소형) 6팩",
      "price" : 9900
    }, {
      "id" : 4,
      "optionName" : "뽑아쓰는 키친타올 130매 12팩",
      "price" : 16900
    }, {
      "id" : 5,
      "optionName" : "2겹 식빵수세미 6매",
      "price" : 8900
    } ]
  },
  "error" : null
}

개별 상품 상세 조회 - 없는 상품 조회 시

존재 하지 않는 상품 번호로의 요청

요청 예시

GET /products/150 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "해당 상품을 찾을 수 없습니다:150",
    "status" : 404
  }
}

회원

이메일 중복 확인

요청 예시

POST /check HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 33
Host: localhost:8080

{
  "email" : "test@test.com"
}

응답 예시

{
  "success" : true,
  "response" : null,
  "error" : null
}

이메일 중복 확인 - 이미 존재하는 이메일인 경우

요청 예시

POST /check HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 38
Host: localhost:8080

{
  "email" : "ssarmango@nate.com"
}

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "동일한 이메일이 존재합니다 : ssarmango@nate.com",
    "status" : 400
  }
}

회원가입

요청 예시

POST /join HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 91
Host: localhost:8080

{
  "email" : "test@test.com",
  "password" : "test1234!",
  "username" : "test_test"
}

응답 예시

{
  "success" : true,
  "response" : null,
  "error" : null
}

회원가입

요청 예시

POST /join HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 91
Host: localhost:8080

{
  "email" : "test@test.com",
  "password" : "test1234!",
  "username" : "test_test"
}

응답 예시

{
  "success" : true,
  "response" : null,
  "error" : null
}

회원가입 - 올바르지 않은 양식

status 400으로 잘못된 내용은 에러메시지에 작성되어 돌아온다.

요청 예시

POST /join HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 82
Host: localhost:8080

{
  "email" : "test",
  "password" : "test1234!",
  "username" : "test_test"
}
email
  • 이메일 형식(정규식: ^@[\w.-]\.[a-zA-Z]{2,6}$)

password
  • 8자 ~ 20자

  • 영문, 숫자, 특수문자가 포함되어하고 공백이 포함되서는 안된다.

username
  • 8자 ~ 45자

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "이메일 형식으로 작성해주세요:email",
    "status" : 400
  }
}

회원가입 - 이미 존재하는 이메일

요청 예시

POST /join HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 96
Host: localhost:8080

{
  "email" : "ssarmango@nate.com",
  "password" : "test1234!",
  "username" : "test_test"
}

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "동일한 이메일이 존재합니다 : ssarmango@nate.com",
    "status" : 400
  }
}

로그인

요청 예시

POST /login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 67
Host: localhost:8080

{
  "email" : "ssarmango@nate.com",
  "password" : "meta1234!"
}

응답 예시

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FybWFuZ29AbmF0ZS5jb20iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWQiOjEsImV4cCI6MTY5MTIwNDUyN30.-w0MvysHdE669Zad5cTl8GDGCczLmj0IhVnImTML9jDSrGFasqgaCjdCmL-Q44wS5wKqIiU4UPOGheQhqk6DRg
Content-Type: application/json;charset=UTF-8
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Length: 65

{
  "success" : true,
  "response" : null,
  "error" : null
}

로그인 - 올바르지 않은 양식

요청 예시

POST /login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 66
Host: localhost:8080

{
  "email" : "ssarmango@nate.com",
  "password" : "meta1234"
}
email
  • 이메일 형식(정규식: ^@[\w.-]\.[a-zA-Z]{2,6}$)

password
  • 8자 ~ 20자

  • 영문, 숫자, 특수문자가 포함되어하고 공백이 포함되서는 안된다.

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "영문, 숫자, 특수문자가 포함되어야하고 공백이 포함될 수 없습니다.:password",
    "status" : 400
  }
}

로그인 - 실패

  • email 없을 시 : "이메일을 찾을 수 없습니다"

  • password 검증 실패 시 : "패스워드가 잘못입력되었습니다"

요청 예시

POST /login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 68
Host: localhost:8080

{
  "email" : "ssarmango@nate.com",
  "password" : "meta1234!!"
}
email
  • 이메일 형식(정규식: ^@[\w.-]\.[a-zA-Z]{2,6}$)

password
  • 8자 ~ 20자

  • 영문, 숫자, 특수문자가 포함되어하고 공백이 포함되서는 안된다.

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "패스워드가 잘못입력되었습니다",
    "status" : 400
  }
}

장바구니

장바구니 담기

장바구니에 담을 옵션과 양을 전달

요청 예시

POST /carts/add HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 45
Host: localhost:8080

[ {
  "optionId" : 3,
  "quantity" : 5
} ]

응답 예시

{
  "success" : true,
  "response" : null,
  "error" : null
}

장바구니 담기 - 올바르지 않은 양식

옵션의 크기는 1 이상이여야한다.

요청 예시

POST /carts/add HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 46
Host: localhost:8080

[ {
  "optionId" : 3,
  "quantity" : -5
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "수량은 양수여야합니다.:list[0].quantity",
    "status" : 400
  }
}

장바구니 담기 - 중복된 옵션

동일한 옵션이 여러개 들어와서는 안된다.

요청 예시

POST /carts/add HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 88
Host: localhost:8080

[ {
  "optionId" : 3,
  "quantity" : 5
}, {
  "optionId" : 3,
  "quantity" : 5
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "동일한 요청이 여러개 들어올 수 없습니다.",
    "status" : 400
  }
}

장바구니 담기 - 존재하지 않는 옵션

존재하지 않는 옵션을 담을 수 없다.

요청 예시

POST /carts/add HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 47
Host: localhost:8080

[ {
  "optionId" : 100,
  "quantity" : 5
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "해당 옵션을 찾을 수 없습니다 : 100",
    "status" : 404
  }
}

장바구니 조회

요청 예시

GET /carts HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : true,
  "response" : {
    "products" : [ {
      "id" : 1,
      "productName" : "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
      "carts" : [ {
        "id" : 1,
        "option" : {
          "id" : 1,
          "optionName" : "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
          "price" : 10000
        },
        "quantity" : 5,
        "price" : 50000
      }, {
        "id" : 2,
        "option" : {
          "id" : 2,
          "optionName" : "02. 슬라이딩 지퍼백 플라워에디션 5종",
          "price" : 10900
        },
        "quantity" : 1,
        "price" : 10900
      } ]
    }, {
      "id" : 4,
      "productName" : "바른 누룽지맛 발효효소 2박스 역가수치보장 / 외 7종",
      "carts" : [ {
        "id" : 3,
        "option" : {
          "id" : 16,
          "optionName" : "선택02_바른곡물효소누룽지맛 6박스",
          "price" : 50000
        },
        "quantity" : 5,
        "price" : 250000
      } ]
    } ],
    "totalPrice" : 310900
  },
  "error" : null
}

장바구니 조회 - 로그인 안했을 시

장바구니(/carts/**) API는 기본적으로 전부 로그인을 요구한다.

요청 예시

GET /carts HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "인증되지 않았습니다",
    "status" : 401
  }
}

장바구니 수정

  • 주문하기를 할 때 장바구니 데이터를 update하고 그 결과를 응답받는다.

  • 결재페이지에서 이 응답을 사용해도 되고, 다시 장바구니 조회 API를 사용해도 된다.

요청 예시

POST /carts/update HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 44
Host: localhost:8080

[ {
  "cartId" : 1,
  "quantity" : 10
} ]

응답 예시

{
  "success" : true,
  "response" : {
    "carts" : [ {
      "cartId" : 1,
      "optionId" : 1,
      "optionName" : "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
      "quantity" : 10,
      "price" : 100000
    }, {
      "cartId" : 2,
      "optionId" : 2,
      "optionName" : "02. 슬라이딩 지퍼백 플라워에디션 5종",
      "quantity" : 1,
      "price" : 10900
    }, {
      "cartId" : 3,
      "optionId" : 16,
      "optionName" : "선택02_바른곡물효소누룽지맛 6박스",
      "quantity" : 5,
      "price" : 250000
    } ],
    "totalPrice" : 360900
  },
  "error" : null
}

장바구니 수정 - 올바르지 않은 양식

옵션의 크기는 1 이상이여야한다.

요청 예시

POST /carts/update HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 45
Host: localhost:8080

[ {
  "cartId" : 1,
  "quantity" : -10
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "수량은 양수여야합니다.:list[0].quantity",
    "status" : 400
  }
}

장바구니 수정 - 장바구니가 비어 있을 때

회원의 장바구니가 비어 있을 경우, 수정 할 수 있는게 존재 하지 않아 api를 사용할 수 없다.

요청 예시

POST /carts/update HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 44
Host: localhost:8080

[ {
  "cartId" : 1,
  "quantity" : 10
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "사용자의 장바구니가 존재하지 않습니다.",
    "status" : 404
  }
}

장바구니 수정 - 중복된 장바구니 번호

동일한 옵션이 여러개 들어와서는 안된다.

요청 예시

POST /carts/update HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 86
Host: localhost:8080

[ {
  "cartId" : 1,
  "quantity" : 10
}, {
  "cartId" : 1,
  "quantity" : 10
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "동일한 요청이 여러개 들어올 수 없습니다.",
    "status" : 400
  }
}

장바구니 수정 - 유저가 가지고 있지 않은 장바구니 번호 요청

가지고 있는 장바구니만을 수정할 수 있다.

요청 예시

POST /carts/update HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 46
Host: localhost:8080

[ {
  "cartId" : 100,
  "quantity" : 10
} ]

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "장바구니 번호가 잘못되었습니다.:100",
    "status" : 400
  }
}

주문

주문하기

장바구니에 존재하는 옵션들을 주문 데이터로 바꾸고 장바구니를 비운다.

요청 예시

POST /orders/save HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : true,
  "response" : {
    "id" : 2,
    "products" : [ {
      "productName" : "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
      "items" : [ {
        "id" : 4,
        "optionName" : "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
        "quantity" : 5,
        "price" : 50000
      }, {
        "id" : 5,
        "optionName" : "02. 슬라이딩 지퍼백 플라워에디션 5종",
        "quantity" : 1,
        "price" : 10900
      } ]
    }, {
      "productName" : "바른 누룽지맛 발효효소 2박스 역가수치보장 / 외 7종",
      "items" : [ {
        "id" : 6,
        "optionName" : "선택02_바른곡물효소누룽지맛 6박스",
        "quantity" : 5,
        "price" : 250000
      } ]
    } ],
    "totalPrice" : 310900
  },
  "error" : null
}

주문하기 - 장바구니가 비어 있을 시

주문할 상품 정보인 장바구니가 존재하지 않으면 주문할 수 가 없다.

요청 예시

POST /orders/save HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "사용자의 장바구니가 존재하지 않습니다.",
    "status" : 404
  }
}

주문 결과 확인

요청 예시

GET /orders/1 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : true,
  "response" : {
    "id" : 1,
    "products" : [ {
      "productName" : "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
      "items" : [ {
        "id" : 1,
        "optionName" : "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
        "quantity" : 5,
        "price" : 50000
      }, {
        "id" : 2,
        "optionName" : "02. 슬라이딩 지퍼백 플라워에디션 5종",
        "quantity" : 1,
        "price" : 10900
      } ]
    }, {
      "productName" : "바른 누룽지맛 발효효소 2박스 역가수치보장 / 외 7종",
      "items" : [ {
        "id" : 3,
        "optionName" : "선택02_바른곡물효소누룽지맛 6박스",
        "quantity" : 5,
        "price" : 250000
      } ]
    } ],
    "totalPrice" : 310900
  },
  "error" : null
}

주문 결과 확인 - 존재 하지 않는 주문 번호

요청 예시

GET /orders/3 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "존재하지 않는 주문입니다.",
    "status" : 404
  }
}

주문 결과 확인 - 다른 회원의 주문 번호 접근 시

각 회원의 주문 정보는 회원 자신만 볼 수 있다.

요청 예시

GET /orders/1 HTTP/1.1
Host: localhost:8080

응답 예시

{
  "success" : false,
  "response" : null,
  "error" : {
    "message" : "허용되지 않은 접근입니다.",
    "status" : 403
  }
}