도서쇼핑몰 프로젝트 API 설계 / uri url
깃 주소
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번 항목으로 이전됨
결제(주문) 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입니다!

배운점)
설계가 끝이 없다!!!!!!!!
완성했다 싶었는데 여전히 수정할 사항이 생긴다!!!!!!
송아쌤 말씀대로 완벽한 마무리는 없다고 생각하고 최대한 꼼꼼하게만 챙겨보면 될 것 같다!!!!