도서 쇼핑몰 API 설계 (5)

차재현·2024년 4월 10일
post-thumbnail

[변경 사항]

  1. 비밀번호 초기화 요청 API의 response 수정 (email 값 전달)
  2. 로그인 시, 쿠키로 응답할 예정


1. 회원 API 설계

  • 회원 가입 API
    • Method : POST
    • URL : /users/join
    • Request Body
      • JSON
        {
        	email : "사용자가 입력한 이메일",
        	password : "사용자가 입력한 비밀번호"
        }
    • Response
      • 201 : 로그인 페이지로 이동

  • 로그인 API
    • Method : POST
    • URL : /users/login
    • Request Body
      • JSON
        {
        	email : "사용자가 입력한 이메일",
        	password : "사용자가 입력한 비밀번호"
        }
    • Response Cookie
      • 200 : JWT Token

  • 비밀번호 초기화 요청 API ( = 신원확인)
    • Method : POST
    • URL : /users/reset
    • Request Body
      • JSON
        {
        	email : "사용자가 입력한 이메일"
        }
    • Response
      • 200
        • JSON
          {
          	email : "이메일"
          }
          • 인증을 위해 입력했던 이메일을 가지고 비밀번호 초기화 화면으로 이동

  • 비밀번호 초기화 API ( = 수정)
    • Method : PUT
    • URL : /users/reset
    • Request Body
      • JSON
        {
        	email : "이전 페이지에서 입력했던 이메일",
        	password : "사용자가 입력한 새로운 비밀번호"
        }
    • Response
      • 200 :

2. 도서 API 설계

  • 전체 도서 조회 API
    • Method : GET
    • URL : /books
    • Request Body : X
    • Response (이미지 경로, 8개씩 응답 → 2가지 고려해야 함)
      • 200
        • JSON Array
          [
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		likes : 좋아요 수,
          		pubDate : 출간일
          	},
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		likes : 좋아요 수,
          		pubDate : 출간일
          	},
          	...
          ]
          • 전체 도서 목록에서 개별 도서 조회 URL로 이동하기 위해서 각 도서 JSON마다 도서 id(book_id)를 가지고 있어야 한다.

  • 개별 도서 조회 API
    • Method : GET
    • URL : /books/:book_id
    • Request Body : X
    • Response(이미지 경로 → 고려해야 함)
      • 200
        • JSON
          {
          	id : 도서 id,
          	title : "도서 제목",
          	category : "카테고리",
          	format : "포맷",
          	isbn : "isbn",
          	summary : "요약 설명",
          	description : "상세 설명",
          	author : "도서 작가",
          	pages : 쪽 수,
          	index : "목차",
          	price : 가격,
          	likes : 좋아요 수,
          	liked : boolean,
          	pubDate : 출간일
          }

  • 카테고리 별 도서 목록 조회 API
    • Method : GET
    • URL : /books?category_id = {category_id}&new = {boolean}
      • new = true 이면 카테고리 별 신간 조회 (기준 : 출간일(pubDate) 30일 이내)
    • Request Body : X
    • Response (이미지 경로, 8개씩 응답, 카테고리 아이디..? → 3가지 고려해야 함)
      • 200
        • JSON Array
          [
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		likes : 좋아요 수,
          		pubDate : 출간일
          	},
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		likes : 좋아요 수,
          		pubDate : 출간일
          	},
          	...
          ]

3. 좋아요 API 설계 (좋아요 테이블을 새로 생성하여 관리)

  • 좋아요 추가 API
    • Method : POST
    • URL : /likes/:book_id
    • Request Body : X
    • Response
      • 200 :
  • 좋아요 취소 API
    • Method : DELETE
    • URL : /likes/:book_id
    • Request Body : X
    • Response
      • 200 :

4. 장바구니 API 설계

  • 장바구니 담기 API
    • Method : POST
    • URL : /carts
    • Request Body
      • JSON
        {
        	book_id : 도서 id,
        	count : 구매 수량
        }
    • Response
      • 201 :

  • 장바구니 조회 API
    • Method : GET
    • URL : /carts
    • Request Body : X
    • Response (이미지 경로 → 고려해야 함)
      • 201
        • JSON Array
          [
          	{
          		cartItem_id : 장바구니에 담긴 도서 id,
          		book_id : 도서 id,
          		title : "도서 제목",
          		summary : "도서 요약",
          		count : 구매 수량,
          		price : 가격
          	},
          	{
          		cartItem_id : 장바구니에 담긴 도서 id,
          		book_id : 도서 id,
          		title : "도서 제목",
          		summary : "도서 요약",
          		count : 구매 수량,
          		price : 가격
          	},
          	...
          ]

  • 장바구니 도서 개별 삭제 API
    • Method : DELETE
    • URL : /carts/:book_id
    • Request Body : X
    • Response
      • 200

  • (장바구니에서 선택한) 주문 “예상” 상품 목록 조회 API
    • Method : GET
    • URL : /…
    • Request Body
      • Array
        [ cartItem_id, cartItem_id, ... ]
    • Response (이미지 경로 → 고려해야 함)
      • 200
        • JSON Array
          [
          	{
          		cartItem_id : 장바구니에 담긴 도서 id,
          		book_id : 도서 id,
          		title : "도서 제목",
          		summary : "도서 요약",
          		count : 구매 수량,
          		price : 가격
          	},
          	{
          		cartItem_id : 장바구니에 담긴 도서 id,
          		book_id : 도서 id,
          		title : "도서 제목",
          		summary : "도서 요약",
          		count : 구매 수량,
          		price : 가격
          	},
          	...
          ]
    • 실제로 주문이 완료된게 아니라 주문 하기 전에 장바구니에 있는 물품 중에서 주문할 것들을 선택할 수 있도록 보여주는 것이기 때문에 주문 API에서 장바구니 API로 이동하였다.

5. 주문 API 설계

  • 결제 하기 API (= 주문 하기 = 주문 등록 = 주문 DB에 INSERT)
    • Method : POST
    • URL : /orders
    • Request Body
      • JSON
        {
            items : [{
        		    cartItem_id : 장바구니 도서 id,
        		    book_id : 도서 id,
        		    count : 수량
            },{
        		    cartItem_id : 장바구니 도서 id,
        		    book_id : 도서 id,
        		    count : 수량
            }, ...],
            delivery : {
        			  address : "주소",
        			  receiver : "이름",
        			  contact : "010-0000-0000"
        		},
        		totalPrice : 총 금액
        		// 결제방법은 보류
        }
        • 주문이 완료된 장바구니 상품은 DELETE 해야 한다.
    • Response
      • 200

  • 주문 목록(내역) 조회 API
    • Method : GET
    • URL : /orders
    • Request Body : X
    • Response
      • 200
        • JSON Array
          [
          		{
          				order_id : 주문 id,
          				create_at : "주문 일자",
          				delivery : {
          						address : "주소",
          						receiver : "이름",
          						contact : "전화번호"
          				},
          				bookTitle : "대표 책 제목",
          				totalPrice : 총 결제 금액,
          				totalCount : 총 수량	
          		},{
          				order_id : 주문 id,
          				create_at : "주문 일자",
          				delivery : {
          						address : "주소",
          						receiver : "이름",
          						contact : "전화번호"
          				},
          				bookTitle : "대표 책 제목",
          				totalPrice : 총 결제 금액,
          				totalCount : 총 수량
          		},
          		...
          ]

  • 주문 상품 상세 조회 API
    • Method : GET
    • URL : /orders/:order_id
    • Request Body : X
    • Response
      • 200
        • JSON Array
          [
          		{
          				book_id : 도서 id,
          				bookTitle : "도서 제목",
          				author : "작가명",
          				price : 가격,
          				count : 수량
          		},{
          				book_id : 도서 id,
          				bookTitle : "도서 제목",
          				author : "작가명",
          				price : 가격,
          				count : 수량
          		},
          		...
          ]
profile
Develop what? and why?

0개의 댓글