본문 바로가기
스프링부트 핵심가이드

[북스터디] 스프링 부트 핵심가이드 (ch5)

by ddahu 2023. 5. 4.

 

chapter05 - API를 작성 하는 다양한 방법

 

 

ch5 핵심적인 구성

  • GET, POST ,PUT , DELETE API 만들기

Spring 을 사용하면서 REST의 호출 4가지의 특징으로 GET , POST , PUT , DELETE 가 있다.

이 특징들은 REST API 웹 애플리에키션 을 만들때 가장 기본적인 CRUD의 형태를 만들 수 있는 특징들이다 .

 

Create ( POST)  -  Client 요청에 데이터를 전달받아 데이터를 저장하는 방법

Read(GET) - Client 요쳥에 따라 DATA를 보여주는 READ 방법

Update(PUT) - Client 요청에 따라 DATA를 수정 하는 방법

Delete(DELETE) - Client 요청에 따라 DATA를 삭제 하는 방법

 

REST API 는 모든 공통적으로 Controller 라는 패키지에 생성하여 @RestController 라는 어노테이션으로 작동한다.

 

Spring 4.3 버전 이후로는 새로나온 어노테이션을 사용하기 때문에

 

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping

위 4개의 어노테이션을 사용한다.

 

 

  • GET API

책에선 GET  API를 만들기전 Spring에서는 Http 에 REST 요청에 필요한 어노테이션을 @RequestMapping 사용한다.

@RequestMapping(value ="/hello", method = RequestMethod.GET) 

으로 value 값과 method 로 구분지어 명시적으로 전달한다.

 

이후 책에서도 위와 같은 방법은 사용하지 않고 @GetMapping 을 사용한다.

 

- @GetMapping 

//http://localhost:8080/api/v1/get-api/name
@GetMapping(value="/name")
public String getName(){
	return "Flature";
}

 

위와 같은 코드로 URL을 그대로 입력하고 요청 할 때 스프링 부트 애플리케이션이 정해진 응답을 반한한다.

 

GET 방식에 매개변수를 넣는 방법으로는

 

@PathVariable , @RequestParam  을 사용하여 매개변수를 전달하는 방법이다.

 

나는 주로 Controller를 작성할때 @RequestParam을 사용한다.

 

@PathVariable 사용법

//http://localhostL8080/api/v1/get-api/name
@GetMapping(value="/variable/{variable}")
public String getVariable(@PathVariable String variable){
	return variable;
}

 

위와 같이 @PathVariable 은 중괄호를 사용하여  URI에 넣어 사용한다.

 

@RequestParm 사용법

 

//http://localhost:8080/api/v1/get-api/request1?name=value1?email=value2&organization=value3
@GetMapping(value = "/request1")
public String getRequestParm1
(
@RequestParam String name, 
@RequestParam String email,
@RequestParam String organization
) 
{
	return name + " " + email + " " + organization;
}

 

@RequestParam 은 URI 에서 '?'를 기준으로 우측에 '{키} = {값} ' 형태로 구성된 요청을 전송하는 방법이다

키와  @RequestParam  뒤에 적는 이름을 동일하게 설정하기 어렵다면 @PathVariable 을 사용한 방법처럼 value를 매핑하면된다

 

 

  • POST API

 

@PostMapping

 

PostMapping은 데이터를 저장하기 사용 된다.

//http://localhost:8080/api/v1/post-api/member2
@PostMapping(value-"/member2")
public String postMemberDto(@RequestBody MemberDto memberDto){

	return memberDto.toString();
}

 

PostMapping 에서 사용된 @RequestBody 는 JSON 형태를 전달받아 데이터 DTO 객체에 전달하는 방식이다.

 

위 코드는 MemberDto의 멤버 변수를 요청 메시지의 키와 매핑해 값을 가져온다.

 

 

  • PUT API

@PutMapping

 

PutMapping은 데이터를 수정하기위해 사용 된다.

 

@RequestBody 를 활용한 방법은 위에 PostMapping과 같으므로 생략

 

@ResponseEntity를 활용하여 PUT메서드를 구현할 수 있다.

 

@ResponseEntity를 사용하여 리턴타입에 HttpsStatus.ACCEPTED의 응답코드를 200 -> 202 로 가지게 할 수 있게 된다.

 

//http://localhost:8080/api/v1/put-api/member3
@PutMapping(value = "/member3")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBodt MemberDto memberDto) {
	return ResponseEntity.status(HttpStatus.ACCEPTED).body(memberDto);
}

 

  • DELETE API

 

@DeleteMapping

 

@DeleteMapping은 데이터를 삭제하기 위사용 된다.

 

@DeleteMapping 도 간단하게 Post와 같다고 생각하여 @RequestParam 를 활용하여 데이터를 삭제 할 수있다.

 

 

//http://localhost:8080/api/v1/delete-api/request1?email=value
@DeleteMapping(value = "/request1")
public String DeleteVariable(@RequestParam String email) {
	return “e-mail :” + email;
}

 

 

 


기본적으로 @RequestBody , @RequestParam 를 주로 사용하게 되고 이 매개변수들은 쿼리 스트링으로 전달하여 JpaRepository 에 키값을 활용한 쿼리문으로 다루는 듯 하다. 

 


주저리 주저리 작성하면서 내 기준으로 생략한 부분도 많지만 생략한 부분에서 Swagger / logback 과 같이 코드를 작성하면서 자주 사용하게 된다면 책을 읽어가면서 이해가 되는 부분이 많아지는것 같다.