일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 개발자
- file upload
- class
- 자바
- Producer
- state
- front-end
- AWS
- Nest.js
- Sequelize
- java
- swagger
- SWIFT
- 조건문
- 상속
- node.js
- spring boot
- 코틀린
- kafka
- Kotlin
- It
- 반복문
- 개발이 취미인 사람
- component
- vue
- props
- react
- back-end
- restful api
- javascript
- Today
- Total
개발이 취미인 사람
[Nest.js] Nest.js API 만들기 (2) - Handler(@Get, @Post ...) 본문
[Nest.js] Nest.js API 만들기 (2) - Handler(@Get, @Post ...)
RyanSin 2021. 11. 9. 23:18- 개요
안녕하세요. 이번 시간에는 지난 시간에 이어서 RESTFul API를 만들어보는 시간을 가져보겠습니다.
지난 시간에는 Controller, Service, Provider에 대해 학습하고 실제 HTTP 요청을 통해 브라우저에서 Hello World!! 를 출력했습니다.
혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다.
[Nest.js] Nest.js API 만들기 (1) - Controller, Service, Provider
- Handler 사용법
우리는 아주 기본적인 유저에 대한 CRUD를 만들어 보겠습니다. (CRUD란...? Create, Read, Update, Delete를 말합니다.)
Nest.js는 클라이언트 요청이 들어오면 다음과 같은 로직으로 실행됩니다.
"1. @Controller -> 2.@Service -> 3. Repository"
클라이언트에 요청과 응답을 처리하는 부분은 Controller가 담당합니다.
비즈니스 로직은 Service가 담당합니다.
REST Method
- @GET : 조회
- @POST : 생성
- @PATCH : 단일 수정
- @PUT : 전체 수정
- @DELETE : 삭제
HTTP 통신을 할 때 위와 같은 메서드를 정의해서 통신을 합니다.
지난 시간 소스코드에 추가를 하면서 진행하도록 하겠습니다.
- UserController
import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get() //경로를 설정하지 않으면 "user/" 경로로 설정이 된다.
getHelloWorld(): string {
return this.userService.getHelloWorld();
}
}
- UserService
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
getHelloWorld(): string {
return 'Hello World!!';
}
}
- GET, POST, PUT, DELETE, PATCH
클라이언트가 데이터를 전송하는 방식은 3가지 방식이 있습니다. 위 코드에서는 대표적으로 GET 방식에서 설명하고 있습니다.
다른 메서드에서도 사용이 가능합니다.
- Body (@Body() 변수명: 자료형) -> @Body() body -> 전체 처리방식
- Body (@Body('키') 키_변수: 자료형) -> @Body('id') id : number - 단일 처리 방식
(Body에서 데이터를 처리하는 방식은 위와 같이 "묶어서" 처리하는 방식과 "하나씩" 단일로 처리하는 방식이 있습니다.) - Query Params (@Query('키') 키_변수: 자료형) -> @Query('id') id: number
- Path Variables (@Param('키') 키_변수: 자료형) -> @Param('id') id: number
- 그리고 위 방식을 혼합해서 사용할 수 있습니다.
- UserService 소스 코드
import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Put,
Query,
} from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get() //경로를 설정하지 않으면 "user/" 경로로 설정이 된다.
getHelloWorld(): string {
return this.userService.getHelloWorld();
}
/**
* @author Ryan
* @description @Body 방식 - @Body 어노테이션 여러개를 통해 요청 객체를 접근할 수 있습니다.
*
* @param id 유저 고유 아이디
* @param name 유저 이름
*/
@Post('/create_user')
onCreateUser(@Body('id') id: number, @Body('name') name: string): User[] {
return this.userService.onCreateUser(id, name);
}
/**
* @author Ryan
* @description 전체 유저 조회
*/
@Get('/user_all')
getUserAll(): User[] {
return this.userService.getUserAll();
}
/**
* @author Ryan
* @description @Query 방식 - 단일 유저 조회
*
* @param id 유저 고유 아이디
*/
@Get('/user')
findByUserOne1(@Query('id') id: number): User {
return this.userService.findByUserOne(id);
}
/**
* @author Ryan
* @description @Param 방식 - 단일 유저 조회
*
* @param id 유저 고유 아이디
*/
@Get('/user/:id')
findByUserOne2(@Param('id') id: number): User {
return this.userService.findByUserOne(id);
}
/**
* @author Ryan
* @description @Param & @Body 혼합 방식 - 단일 유저 수정
*
* @param id 유저 고유 아이디
* @param name 유저 이름
*/
@Patch('/user/:id')
setUser(@Param('id') id: number, @Body('name') name: string): User {
return this.userService.setUser(id, name);
}
/**
* @author Ryan
* @description @Body 방식 - 전체 유저 수정
*
* @param id 유저 고유 아이디
* @param name 유저 이름
*/
@Put('/user/update')
setAllUser(@Body('id') id: number, @Body('name') name: string): User[] {
return this.userService.setAllUser(id, name);
}
/**
* @author Ryan
* @description @Query 방식 - 단일 유저 삭제
*
* @param id 유저 고유 아이디
*/
@Delete('/user/delete')
deleteUser(@Query('id') id: number): User[] {
return this.userService.deleteUser(id);
}
}
- UserService
import { Injectable } from '@nestjs/common';
const users: User[] = [
{ id: 1, name: '유저1' },
{ id: 2, name: '유저2' },
{ id: 3, name: '유저3' },
];
@Injectable()
export class UserService {
/**
* @author Ryan
* @description 유저 생성
*
* @param id 유저 고유 아이디
* @param name 유저 이름
* @returns {User[]} users
*/
onCreateUser(id: number, name: string): User[] {
return users.concat({ id, name });
}
/**
* @author Ryan
* @description 모든 유저 조회
*
* @returns {User[]} users
*/
getUserAll(): User[] {
return users;
}
/**
* @author Ryan
* @description 단일 유저 조회
*
* @param id 유저 고유 아이디
* @returns {User} users
*/
findByUserOne(id: number): User {
return users.find((data) => data.id == id);
}
/**
* @author Ryan
* @description 단일 유저 수정
*
* @returns {User} users
*/
setUser(id: number, name: string): User {
return users.find((data) => {
if (data.id == id) return (data.name = name);
});
}
/**
* @author Ryan
* @description 전체 유저 수정
*
* @returns {User[]} users
*/
setAllUser(id, name): User[] {
return users.map((data) => {
if (data.id == id) {
data.name = name;
}
return {
id: data.id,
name: data.name,
};
});
}
/**
* @author Ryan
* @description 유저 삭제
*
* @param id
* @returns {User[]} users
*/
deleteUser(id: number): User[] {
return users.filter((data) => data.id != id);
}
getHelloWorld(): string {
return 'Hello World!!';
}
}
소스 코드에 주석을 통해 설명을 해놨습니다.
기본적으로 API 개념에 대해 알고 있으시면 어렵게 느껴지지 않으실거라고 생각합니다.
하지만 따로 꼭 실습을 해보시는 걸 추천 드리겠습니다.
소스 저장소
'백앤드(Back-End) > Nest.js' 카테고리의 다른 글
[Nest.js] Nest.js API 만들기 (4) - 미들웨어(Middleware) (0) | 2021.11.11 |
---|---|
[Nest.js] Nest.js API 만들기 (3) - DTO(Data Transfer Object) & 유효성 검사(Validation Check) & Pipes (1) | 2021.11.10 |
[Nest.js] Nest.js API 만들기 (1) - Controller, Service, Provider (0) | 2021.11.07 |
[Nest.js] Nest.js 기본 구조 분석하기 (0) | 2021.11.06 |
[Nest.js] Nest.js 개념 및 프로젝트 생성 (0) | 2021.11.06 |