우당탕탕 백엔드 입문기록(2) - api 그거 어떻게 만드는 건데?

const job = '프론트엔드';·2024년 11월 27일
1

nest

목록 보기
2/4
post-thumbnail

CRUD API를 만들어보자.

지난 번에 만들었던, users.controller.ts에서 작업 시작

/
GET /users
GET /users/:id
POST /users
PATCH /users/:id
DELETE /users/:id
/

  1. 일반적인 GET 요청
    요청사항: 유저의 정보를 불러오기
    @Get 데코레이터 사용

     @Get() // GET /users
    findAll() {
      return [];
    }

  2. 중첩경로 GET 요청

  @Get('interns') // GET /users/interns
  findAllInterns() {
    return ['GET방식, endpoint는 /user/interns 입니다.'];
  }

  1. 동적경로 GET 요청
  @Get(':id') // GET /users/:id
  findOne(@Param('id') id: string) {
    return `GET방식, 동적경로 /users/${id}`;
  }

  1. 일반적인 POST 요청
    @Post 데코레이터 사용
    파라미터가 들어갈 @Body데코레이터 사용
  @Post() // POST /users
  create(@Body() user: {}) {
    return user;
  }


오류발생
왜냐하면! JSON 객체의 마지막 항목 뒤에 쉼표 때문

제거하고 요청했더니 성공!

  1. PATCH요청
    @Patch 데코레이터 사용
    특정 id를 동적으로 업데이트 하는 기능을 하기 때문에 @Param 데코레이터 사용, 그리고 반환이 될 데이터가 있기 때문에 @Body데코레이터 사용
  @Patch(':id') // PATCH /users/:id
  update(@Param('id') id: string, @Body() userUpdate: {}) {
    return { id, ...userUpdate };
  }

  • 동적으로 id 값을 경로에 넣어주지 않으면 404오류 발생
  • 경로에 담은 id 값을 담아서 userUpdate에 포함시켜 출력됨
  1. DELETE 요청
    @Delete데코레이터 사용
    특정 id를 동적으로 삭제하기 때문에 @Param데코레이터를 사용
  @Delete(':id') // DELETE /users/:id
  delete(@Param('id') id: string) {
    return { id };
  }

  1. 쿼리를 사용해서 요청
    @Query 데코레이터 사용
  @Get() // GET /users or /users?role=value
  findAll(@Query('role') role?: 'INTERN' | 'ENGINEER' | 'ADMIN') {
    return [];
  }

  • 이렇게 요청했더니 200이 중요한게 아니라, Query 부분에 role과 ADMIN이 생겨남

신기하고, 어렵고, 두렵고, 이게 맞나 싶고, 그냥 하는거지 뭐.

profile
`나는 ${job} 개발자`

1개의 댓글

comment-user-thumbnail
2024년 11월 27일

함박웃음 지으면서 봤내^_^ 언니는 이제 풀스택이 되어가는구나… 멋져…

답글 달기