웹 풀사이클 데브코스 TIL [Day 31] - Book store API 설계

JaeKyung Hwang·2024년 1월 1일
0
post-thumbnail

2023.12.29(금)

🖋️API 설계

👤회원 API

📖도서 API

(이미지는 아직 고려 X)

❤️좋아요 API

🛒장바구니 API

🛍️주문 API

🧱코드 구조 작성

npm i express dotenv express-validator jsonwebtoken mysql2

  • .env

    PORT = 7777 # express port number
  • app.js

    • port number를 env 파일에 저장하고 dotenv 모듈로 가져와서 사용
    • 각 API를 모듈화해서 app.js에서 routing
    const express = require('express');
    const app = express();
    const dotenv = require('dotenv');
    dotenv.config();
    app.listen(process.env.PORT, () => console.log(`> Server is running on http://localhost:${process.env.PORT}/`))
    
    const userRouter = require('./routes/users');
    const bookRouter = require('./routes/books');
    const likeRouter = require('./routes/likes');
    const cartRouter = require('./routes/carts');
    const orderRouter = require('./routes/orders');
    
    app.use(express.json());
    app.use('/users', userRouter);
    app.use('/books', bookRouter);
    app.use('/likes', likeRouter);
    app.use('/cart', cartRouter);
    app.use('/orders', orderRouter);
  • routes/users.js

    const express = require('express');
    const router = express.Router();
    // const jwt = require('jsonwebtoken');
    
    const signUp = (req, res) => {
        res.json("회원가입");
    };
    
    const signIn = (req, res) => {
        res.json("로그인");
    };
    
    const passwordResetRequest = (req, res) => {
        res.json("비밀번호 재설정 요청");
    };
    
    const resetPassword = (req, res) => {
        res.json("비밀번호 재설정");
    };
    
    router.post('/join', signUp);
    router.post('/login', signIn);
    router.route('/reset-password')
        .post(passwordResetRequest)
        .put(resetPassword);
    
    module.exports = router;
  • routes/books.js

    const express = require('express');
    const router = express.Router();
    
    const booksRequestHandler = (req, res) => {
        // 추후 express-validator 사용 (지금은 간단히 분기 로직 구현)
        const { categoryId, new:isNew } = req.query;
        if (categoryId || isNew) {
            getBooksByCategory(req, res);
        } else {
            getAllBooks(req, res);
        }
    }
    
    const getAllBooks = (req, res) => {
        res.json("전체 도서 조회");
    };
    
    const getBookById = (req, res) => {
        res.json("개별 도서 조회");
    };
    
    const getBooksByCategory = (req, res) => {
        res.json("카테고리별 도서 목록 조회");
    };
    
    router.get('/', booksRequestHandler);
    router.get('/:bookId', getBookById);
    
    module.exports = router;
  • routes/likes.js

    const express = require('express');
    const router = express.Router();
    
    const likeBook = (req, res) => {
        res.json("좋아요 추가");
    };
    
    const unlikeBook = (req, res) => {
        res.json("좋아요 취소");
    };
    
    router.route('/:bookId')
        .post(likeBook)
        .delete(unlikeBook);
    
    module.exports = router;
  • routes/carts.js

    const express = require('express');
    const router = express.Router();
    
    const addToCart = (req, res) => {
        res.json("장바구니 담기");
    };
    
    const getCart = (req, res) => {
        res.json("장바구니 조회");
    };
    
    const removeFromCart = (req, res) => {
        res.json("장바구니 삭제");
    };
    
    const getSelectedItemsFromCart = (req, res) => {
        res.json("장바구니에서 선택한 '주문 예상' 상품 목록 조회");
    };
    
    router.route('/')
        .post(addToCart)
        .get(getCart);
    
    router.delete('/:bookId', removeFromCart);  // bookId가 아니라 cart의 itemId가 될 수도
    router.post('/items', getSelectedItemsFromCart);    // uri 미확정. 일단 임시로.
    
    module.exports = router;
  • routes/orders.js

    const express = require('express');
    const router = express.Router();
    
    const submitOrder = (req, res) => {
        res.json("결제(주문)하기");
    };
    
    const getOrderList = (req, res) => {
        res.json("주문 목록(내역) 조회");
    };
    
    const getOrderDetails = (req, res) => {
        res.json("주문 상세 상품 조회");
    };
    
    router.route('/')
        .post(submitOrder)
        .get(getOrderList);
    router.get('/:orderId', getOrderDetails);
    
    module.exports = router;

모두 handler를 함수로 빼서 어떤 API인지 쉽게 알 수 있도록 해보았다.
ERD와 API는 모두 추후 코드를 작성하며 수정될 수 있다.

profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글