[ZB_BOOK STUDY] 스프링 부트 핵심 가이드 (5-2)

Dreamer·2024년 3월 31일
0
post-thumbnail

📖 스프링 부트 핵심 가이드

: 스프링 부트를 활용한 애플리케이션 개발 실무


📝 목차

5장. API를 작성하는 다양한 방법

5-3. POST API 만들기
- @RequestMapping으로 구현하기
- @RequestBody를 활용한 POST 메서드 구현

5-4. PUT API 만들기
- @RequestBody를 활용한 PUT 메서드 구현
- @ResponseEntity를 활용한 PUT 메서드 구현

5-5. DELETE API 만들기
- @PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현


5장. API를 작성하는 다양한 방법

  • 본격적인 애플리케이션 개발에 필요한 내용
  • 각 HTTP 메서드에 해당하는 API를 개발해보자
  • 외부의 요청을 받아 응답하는 기능을 구현
    ➙ 컨트롤러가 어떻게 구성되는지 알아보자!

5-3. POST API 만들기

: POST API는 웹 애플리케이션을 통해 저장소에 리소스를 저장할 때 사용되는 API

  • POST API에서는 저장하고자 하는 리소스나 값을
    ➙ HTTP 바디(body)에 담아 서버에 전달
    ➙ URI가 GET API에 비해 간단하다

⬇️ @RequestMapping 어노테이션을 이용해 공통 URL 설정

package com.springboot.api.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/post-api")
public class PostController {

}

① @RequestMapping으로 구현하기

⬇️ method 요소를 RequestMethod.POST로 설정하는 부분만 다름

@RequestMapping(value = "/domain", method = RequestMethod.POST)
    public String postExample(){
        return "Hello Post API";
}

② @RequestBody를 활용한 POST 메서드 구현

일반적으로 POST 형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용
클라이언트 요청 트래픽에 값이 포함되어 있다
➙ POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송

  • Body 영역에 작성되는 값은 일정한 형태를 가짐
  • 일반적으로 JSON(JavaScript Object Notation) 형식으로 전송

⬇️ @RequestBody와 Map을 활용한 POST API 구현
Map 객체는 요청을 통해 어떤 값이 들어오게 될지 특정하기 어려울 때 사용

// http://localhots:8080/post-api/member

 @PostMapping(value = "/member")
 public String postMember(@RequestBody Map<String,Object> postData){
 	StringBuilder sb = new StringBuilder();
    
    postData.entrySet().forEach(map -> {
    	sb.append(map.getKey() + " " + map.getValue() + "\n");
        });
        
        return sb.toString();
}
  • @RequestMapping ➡️ @PostMapping
    @PostMapping 어노테이션을 사용하면 method 요소를 정의하지 않아도 된다.

  • @RequestBody는 HTTP의 Body 내용을 어노테이션이 지정된 객체에 매핑!


⬇️ DTO객체를 매개변수로 POST API 구현
요청 메세지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 삼아 작성 가능

//http://localhots:8080/post-api/member2

@PostMapping(value = "/member2")
public String postMember(@RequestBody MemberDto memberDto){
	return memberDto.toString();
}

5-4. PUT API 만들기

: PUT API는 웹 애플리케이션 서버를 통해 저장소에 존재하는 리소스 값을 업데이트 할때 사용

  • 컨트롤러 클래스 구현하는 방법은 POST API와 거의 동일
    : 리소스를 서버에 전달하기 위해 HTTP body를 활용하기 때문
@RestController
@RequestMapping("put-api")
public class PutController {

}

① @RequestBody를 활용한 PUT 메서드 구현

: POST 메서드와 마찬가지로 값을 HTTP Body에 담아 전달

  • 서버에 어떤 값이 들어올지 모르는 경우
    : Map 객체 활용

⬇️ @RequestBody와 Map을 활용한 PUT메서드 구현

// http://localhost:8080/put-api/member

 @PutMapping("/member")
 public String putMeber(@RequestBody Map<String, Object> putData){
 	StringBuilder sb = new StringBuilder();
    
    putData.entrySet().forEach(map->{

    	sb.append(map.getKey() + " " + map.getValue() +"\n");
    });
    
    return sb.toString();
}
  • 서버에 들어오는 요청에 담겨 있는 값이 정해져 있는 경우
    : DTO 객체 활용
    (return type 비교)

⬇️ DTO 객체를 활용한 PUT 메서드 구현

// http://localhost:8080/put-api/member1return type ➙ String@PutMapping(value = "/member1")
public String putMemberDto1(@RequestBody MemberDto memberDto){
	return memberDto.toString();
}return type ➙ DTO 객체 ⭐
// http://localhost:8080/put-api/member2

@PutMapping(value = "/member2")
public MemberDto putMemberDto2(@RequestBody MemberDto memberDto){
	return memberDto;
}

⭐ return type이 String일 때,
toString 메서드로 인해 나름의 형식 갖춰져 전달됐지만
➙ HEADERS 항목의 context-type : 'text/plain'
➙ 결괏값으로 일반 문자열이 전달됐음을 확인

⭐ return type이 DTO일 때,
DTO 객체에서 context-type : 'application/json' 형식으로 전달
@RestController 어노테이션이 지정된 클래스는 @ResponseBody를 생략 가능
@ResponseBody 어노테이션은 자동으로 값을 JSON 형식으로 변환해서 전달하는 역할 수행

② @ResponseEntity를 활용한 PUT 메서드 구현

❓ 다시 공부하기 ❓

스프링 프레임워크에는 HttpEntity라는 클래스가 존재
: HttpEntity는 다음과 같이 헤더(Header)와 Body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행

5-5. DELETE API 만들기

: DELETE API는 웹 애플리케이션 서버를 거쳐 저장소에 있는
리소스를 삭제할 때 사용

서버에서는 클라이언트로부터 리소스를 식별할 수 있는 값을 받아서
리소스를 조회, 삭제하는 역할을 수행

⬇️ DeleteController 클래스

@RequestController
@RequestMapping("/delete-api")
public class DeleteController {

}

@PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현

  • @PathVariable을 이용하면 URI에 포함된 값을 받아 로직 처리
// http://localhost:8080/delete-api/{String 값}

@DeleteMapping(value = "/{variable}")
public String DeleteVariable(@PathVariable String variable){
	return variable;
}

⬇️
@DeleteMapping 어노테이션에 정의한 value의 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다!

  • @RequestParam을 통해 쿼리스트링 값도 받을 수 있다.

⬇️ @RequestParam을 활용한 DELETE 메서드 구현

// http://localhost:8080/delete-api/request1?email=value

@DeleteMapping(value = "/request1")
public String getRequestParam1 (@RequestParam String email){
	return "email :" + email;
}


📌 Tip

JSON이란?

JSON은 (JavaScript Object Notation)의 줄임말로,
자바스크립트의 객체 문법을 따르는 문자 기반의 데이터 포맷입니다.

대체로 네트워크를 통해 데이터 전달할 때 사용
장점 : 문자열 형태로 작성 ➙ 파싱이 쉽다

profile
Moving forward based on records

0개의 댓글