도서 쇼핑몰 API 설계 (6)

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

[변경 사항]

  1. 전체 도서 조회 부분에서 프론트엔드에게 로직 관련 공지 추가
  2. 도서 API 설계 부분에서 “좋아요” 기능 미구현임으로 응답 형식에서 좋아요 관련 데이터 보류 처리
  3. 모든 도서 API에서 응답에 “이미지 id” 추가
  4. 카테고리 별 도서 조회 시, 신간 도서 조회 기능은 아직 보류
  5. 카테고리 데이터 활용을 위해 카테고리 테이블 생성 및 신규 “카테고리 API 설계” 진행


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 : "도서 제목",
          		img : 이미지 id (picsum image #num),
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		~~likes : 좋아요 수,~~
          		pubDate : 출간일
          	},
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		~~likes : 좋아요 수,~~
          		pubDate : 출간일
          	},
          	...
          ]
          • 전체 도서 목록에서 개별 도서 조회 URL로 이동하기 위해서 각 도서 JSON마다 도서 id(book_id)를 가지고 있어야 한다.
          • 전체 도서 데이터를 DB에서 가지고 올 때, 도서들의 모든 정보를 가져오는 것으로 설계하였기 때문에 프론트엔드 개발자에게 전체 데이터중에 필요한 데이터만 사용하라고 알려주도록 한다.

  • 개별 도서 조회 API
    • Method : GET
    • URL : /books/:book_id
    • Request Body : X
    • Response(이미지 경로 → 고려해야 함)
      • 200
        • JSON
          {
          	id : 도서 id,
          	title : "도서 제목",
          	img : 이미지 id (picsum image #num),
          	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 : "도서 제목",
          		img : 이미지 id (picsum image #num),
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		~~likes : 좋아요 수,~~
          		pubDate : 출간일
          	},
          	{
          		id : 도서 id,
          		title : "도서 제목",
          		img : 이미지 id (picsum image #num),
          		summary : "요약 설명",
          		author : "도서 작가",
          		price : 가격,
          		~~likes : 좋아요 수,~~
          		pubDate : 출간일
          	},
          	...
          ]

3. 카테고리 API 설계 (카테고리 테이블 생성)

  • 카테고리 전체 조회 API
    • Method : GET
    • URL : /category
    • Request Body : X
    • Response
      • 200
        • JSON Array
          [
          	{
          		id = 카테고리 id,
          		name = 카테고리 이름
          	},{
          		id = 카테고리 id,
          		name = 카테고리 이름
          	},
          	...
          ]

4. 좋아요 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 :

5. 장바구니 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로 이동하였다.

6. 주문 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개의 댓글