도서 쇼핑몰 API 설계 (3)

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

[변경 사항]

  1. 240408(월) 부터 API 노션 따로 관리 시작

  2. LMS 강의 주제 번호와 맞추기 위해 버전 (3) 부터 시작

  3. 좋아요 API 수정

  4. 장바구니 테이블 이름 수정

  5. 주문 API의 “장바구니에서 선택한 주문 상품 목록 조회” 기능을 장바구니 API로 이동

  6. 주문 API 추가 설계

    4.1 결제 하기 API

    4.2 주문 목록(내역) 조회 API

    4.3 주문 상품 상세 조회 API



1. 회원 API 설계

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

  • 로그인 API
    • Method : POST
    • URL : /login
    • Request Body
      • JSON
        {
        	email : "이메일",
        	password : "비밀번호"
        }
    • Response
      • 200 : JWT Token

  • 비밀번호 초기화 요청 API ( = 신원확인)
    • Method : POST
    • URL : /reset
    • Request Body
      • JSON
        {
        	email : "이메일"
        }
    • Response
      • 200 : “Your password is changed!” → 로그인 화면 이동

  • 비밀번호 초기화 실행 API ( = 수정)
    • Method : PUT
    • URL : /reset
    • Request Body
      • JSON
        {
        	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 : /cart
    • Request Body
      • JSON
        {
        	book_id : 도서 id,
        	count : 구매 수량
        }
    • Response
      • 201 :

  • 장바구니 조회 API
    • Method : GET
    • URL : /cart
    • 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 : /cart/: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개의 댓글