고양이와 코딩
[웹 풀사이클 데브코스] 8주차 Day 2 - 쿼리스트링을 사용해 하나의 엔드포인트로 기능 분리하기 본문
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를 설계 하고 있습니다.
왜 이렇게 하나요 ? (설계 이점)
- 단일 엔드포인트 유지: API 엔드포인트가 하나이므로 클라이언트 측에서 하나의 URL만 사용하여 다양한 요청을 처리할 수 있습니다.
- 일관성: 여러 기능을 하나의 리소스로 통합함으로써 일관성을 유지하고 API의 복잡성을 줄일 수 있습니다.
- 확장성: 미래에 다른 필터링 옵션 또는 조회 방법이 추가되더라도 동일한 엔드포인트에서 처리할 수 있습니다.
'데브코스 TIL' 카테고리의 다른 글
[웹 풀사이클 데브코스 TIL] 9주차 Day 2 - 주문하기 flow 정리 (1) | 2024.01.09 |
---|---|
[웹 풀사이클 데브코스 TIL] - 8주차 Day 3 - SQL 함수의 활용, 데이터베이스 페이징 (1) | 2024.01.04 |
[웹 풀사이클 데브코스 TIL] 8주차 Day 1 - API 설계, crypto를 사용한 암호화 (1) | 2024.01.02 |
[웹 풀사이클 데브코스] 7주차 Day 5 - API 점검, Express-generator (2) | 2023.12.29 |
[웹 풀사이클 데브코스] 7주차 Day 4 - 도서 정보 API 설계 및 구현 (1) | 2023.12.28 |