고양이와 코딩

[웹 풀사이클 데브코스] 8주차 Day 2 - 쿼리스트링을 사용해 하나의 엔드포인트로 기능 분리하기 본문

데브코스 TIL

[웹 풀사이클 데브코스] 8주차 Day 2 - 쿼리스트링을 사용해 하나의 엔드포인트로 기능 분리하기

ovovvvvv 2024. 1. 3. 19:31
728x90
const allBooks = (req, res) => {
    let {category_id} = req.query;

    if (category_id) {
        let sql = `SELECT * FROM books WHERE category_id = ?`;
        conn.query(sql, category_id, (err, results) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }
            if (results.length) {
                return res.status(StatusCodes.OK).json(results);
            } else {
                return res.status(StatusCodes.NOT_FOUND).end();
            }
    })
} else {    
    let sql = `SELECT * FROM books`
    conn.query(sql, (err, results ) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }
           return res.status(StatusCodes.OK).json(results);
        })
    };
}

 

GET /books

기존의 GET /books 엔드포인트는 책 전체 조회를 담당하는 API였는데요, 

 

카테고리별 책 조회 API 를 따로 나누는게 아니라 

GET /books?category_id={category_id}

`category_id` 쿼리 파라미터를 통해 특정 카테고리의 책을 조회 할 수 있습니다! 

 

따라서, 하나의 엔드포인트 ('/books')로 두 가지 다른 기능을 수행하는 RESTful API를 설계 하고 있습니다.

 

왜 이렇게 하나요 ? (설계 이점)

  1. 단일 엔드포인트 유지: API 엔드포인트가 하나이므로 클라이언트 측에서 하나의 URL만 사용하여 다양한 요청을 처리할 수 있습니다.
  2. 일관성: 여러 기능을 하나의 리소스로 통합함으로써 일관성을 유지하고 API의 복잡성을 줄일 수 있습니다.
  3. 확장성: 미래에 다른 필터링 옵션 또는 조회 방법이 추가되더라도 동일한 엔드포인트에서 처리할 수 있습니다.