PROJECT/[ 도서쇼핑몰 ]

도서쇼핑몰 프로젝트 API 설계 / uri url

Lim임 2025. 10. 14. 17:40

깃 주소

https://github.com/in7570/book-shop-project

회원 API

 

1. 회원가입

Method POST
URI /users/join
HTTP status code status 201
Request Body {
    email: "사용자가 입력한 이메일",
    password: "사용자가 입력한 비밀번호"
}
Response Body  

 

*status 201 : 생성하는 것에 성공하였음

 

2. 로그인

Method POST
URI /users/login
HTTP status code status 200
Request Body {
    email: "사용자가 입력한 이메일",
    password: "사용자가 입력한 비밀번호"
}
Response Cookie JWT Token

 

*JWT Token : 로그인 성공했으니 일정 기간 동안은 이거 들고 오면 인증해줄게~

 

3. 비밀번호 초기화 요청

Method POST
URI /users/reset
HTTP status code status 200
Request Body {
    email: "사용자가 입력한 이메일"
}
Response Body  

 

4. 비밀번호 초기화

Method PUT
URI /users/reset
HTTP status code status 200
Request Body {
    password: "사용자가 입력한 비밀번호"
}
Response Body  

 


도서 API

1. 도서 전체 조회

이미지 n개씩 보내줘야함 (limit, offset => req에 담아보낸다.)

Method GET
URI /books
HTTP status code status 200
Request Body  
Response Body // 전체 도서 목록에는 도서의 상세 정보를 포함합니다.
// 필요한 데이터만 선별하여 구현 부탁드립니다.
[
    {
        id:  도서 id,
        title: "도서 제목",
        img: 이미지 id (picsum image #id)
        summary: "요약 설명",
        author: "도서 작가",
        price: "가격",
        likes: "좋아요 수",
        pubDate: "출간일"
    },
    {
        id: 도서 id,
        title: "도서 제목",
        img: 이미지 id (picsum image #id)
        summary: "요약 설명",
        author: "도서 작가",
        price: "가격",
        likes: "좋아요 수",
        pubDate: "출간일"
    },
    ... // 8개씩 보내기
]

 

2. 도서 개별 조회

Method GET
URI /books/{bookId}
HTTP status code status 200
Request Body  
Response Body [
    {
        id: 도서 id,
        title: "도서 제목",
        img: 이미지 id (picsum image #id)
        category: "카테고리",
        format: "포맷",
        isbn: "isbn",
        summary: "요약 설명",
        description: "상세 설명",
        author: "도서 작가",
        pages: "쪽수",
        price: "가격",
        likes: "좋아요 수",
        liked: boolean,
        pubDate: "출간일"
    }
]

 

3. 카테고리별 도서 조회

Method GET
URI /books?categoryId={categoryId}&new={boolean}
HTTP status code status 200
Request Body  
Response Body [
    {
        id:  도서 id,
        title: "도서 제목",
        img: 이미지 id (picsum image #id)
        summary: "요약 설명",
        author: "도서 작가",
        price: "가격",
        likes: "좋아요 수",
        pubDate: "출간일"
    },
    {
        id: 도서 id,
        title: "도서 제목",
        img: 이미지 id (picsum image #id)
        summary: "요약 설명",
        author: "도서 작가",
        price: "가격",
        likes: "좋아요 수",
        pubDate: "출간일"
    },
    ... // 8개씩 보내기
]

 


카테고리 API 

1. 카테고리 전체 조회

Method GET
URI /category
HTTP status code status 200
Request Body  
Response Body [
    {
        id: 0,
        name:"동화"
    },
   {
        id: 1,
        name:"소설"
    },
    {
        id: 2,
        name:"사회"
    }

]

 

좋아요 API 

1. 좋아요 추가

Method POST
URI /likes/{bookId}
HTTP status code status 200
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
Response Body  

 

2. 좋아요 취소

Method DELETE
URI /likes/{bookId}
HTTP status code status 200
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
Response Body  

장바구니 API

// 회원 1명당 - 장바구니 1개씩

1. 장바구니 담기

Method POST
URI /cart
HTTP status code status 201
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
{
    bookId: "도서 id",
    quantity: "수량",
    userId:"회원id"
}
Response Body  

 

2. 장바구니 조회  / 4. 장바구니에서 선택한 주문 "예상" 상품 목록 조회 ( 전체조회에서 응용할 수 있음 )

Method GET
URI /cart
HTTP status code status 200
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
{
         userId:"회원id",
         selected : [cartItemId,cartItemId,...]
}
Response Body [
    {
        id: 장바구니 도서 id",
        bookId: "도서 id",
        title: "도서 제목",
        summary: "도서 요약",
        quantity: "수량",
        price: "가격"
    },
    {
        id: "장바구니 도서 id",
        bookId: "도서 id",
        title: "도서 제목",
        summary: "도서 요약",
        quantity: "수량",
        price: "가격"
    }
    ...
]

 

3. 장바구니 도서 삭제

Method DELETE
URI /cart/{bookId}
HTTP status code status 200
Request Body  
Response Body  

 

4. 장바구니에서 선택한 주문 "예상" 상품 목록 조회

 

2번 항목으로 이전됨

Method GET
URI /
HTTP status code status 200
Request Body [ cartItemId, cartItemId, ... ]
Response Body [
    {
        cartItemId: 장바구니 도서 id,
        bookId: 도서 id,
        title: "도서 제목",
        summary: "도서 요약",
        quantity: 수량, (해당 페이지에 나갔다 들어와도(변경 = table cartItems update)
                                  반영되어 있음)
        price: 가격
    },
    {
        cartItemId: 장바구니 도서 id,
        bookId: 도서 id,
        title: "도서 제목",
        summary: "도서 요약",
        quantity: 수량,
        price: 가격
    }
    ...
]

 


결제(주문) API 구현 

1. 결제하기 = 주문하기 = 주문등록  = 데이터베이스 주문 insert

Method POST
URI /orders
HTTP status code status 200
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
{
     items : [장바구니 도서 id,장바구니 도서 id,...],
     ]
     delivery :{   (1) delivery insert
         address : "주소",
         receiver : "이름",
         contact : "010-0000-0000"
     }
     totalQunatity : "총 수량",(2) orders insert
     totalPrice : "총 금액" ,
     userId : "회원Id",
     firstBookTitle : "대표 도서 제목"
}
Response Body  

 

2. 주문 목록(내역) 조회

MethodGET GET
URI /orders
HTTP status code status 200
Request Body // 로그인할 때 받은 token > header "Authorization"
// payload값을 읽을 수 있죠 = 사용자의 id를 읽어낼 수 있음
{
     "userId" : "사용자 Id"
}
Response Body [
    {
        id: 주문 id,
        created_at: "주문일자",
        address: "주소",
        receiver: "이름",
        contact: "전화번호"
        book_title: "대표 책 제목",
        total_quantity: 총 수량,
        total_price: 결제 금액
    }
]

 

3. 주문 상세 조회

Method GET
URI /orders/{orderId}
HTTP status code status 200
Request Body  
Response Body  [
    {
        book_id: 도서 id,
        book_title: "도서 제목",
        author: "작가명",
        price: 가격,
        quantity: 수량
    }
    {
        book_id: 도서 id,
        book_title: "도서 제목",
        author: "작가명",
        price: 가격,
        quantity: 수량
    }
    ...
]

 


URI와 URL 

URI (Uniform Resource Identifier)

영어 단어 Uniform Resource Identifier의 약자인 URI 뜻은 우리말로 ‘통합 자원 식별자’입니다.

  • Uniform은 리소스를 식별하는 통일된 방식을 말합니다.
  • Resource란, URI로 식별이 가능한 모든 종류의 자원(웹 브라우저 파일 및 그 이외의 리소스 포함)을 지칭합니다.
  • Identifier는 다른 항목과 구분하기 위해 필요한 정보입니다.

즉, URI는 인터넷상의 리소스 “자원 자체”를 식별하는 고유한 문자열 시퀀스입니다. 

URL (Uniform Resource Locator)

URL은 Uniform Resource Locator, 네트워크상에서 통합 자원(리소스)의 “위치”를 나타내기 위한 규약입니다. 즉, 자원 식별자와 위치를 동시에 보여주죠.

 

웹 사이트 주소 + 컴퓨터 네트워크 상의 자원

 

이는 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타내는 표기법인데요. 조금 더 쉽게 설명하자면, 

특정 웹 페이지의 주소에 접속하기 위해서는 웹 사이트의 주소뿐만 아니라 프로토콜(https, http, sftp, smp 등)을 함께 알아야 접속이 가능한데, 이들을 모두 나타내는 것이 URL입니다!

 

 

배운점)

설계가 끝이 없다!!!!!!!!

완성했다 싶었는데 여전히 수정할 사항이 생긴다!!!!!!

송아쌤 말씀대로 완벽한 마무리는 없다고 생각하고 최대한 꼼꼼하게만 챙겨보면 될 것 같다!!!!