
: 스프링 부트를 활용한 애플리케이션 개발 실무
📝 목차
5장. API를 작성하는 다양한 방법
5-3. POST API 만들기
- @RequestMapping으로 구현하기
- @RequestBody를 활용한 POST 메서드 구현
5-4. PUT API 만들기
- @RequestBody를 활용한 PUT 메서드 구현
- @ResponseEntity를 활용한 PUT 메서드 구현
5-5. DELETE API 만들기
- @PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현
: POST API는 웹 애플리케이션을 통해 저장소에 리소스를 저장할 때 사용되는 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 {
}
⬇️ method 요소를 RequestMethod.POST로 설정하는 부분만 다름
@RequestMapping(value = "/domain", method = RequestMethod.POST)
public String postExample(){
return "Hello Post API";
}
일반적으로 POST 형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용
클라이언트 요청 트래픽에 값이 포함되어 있다
➙ POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송
⬇️ @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();
}
: PUT API는 웹 애플리케이션 서버를 통해 저장소에 존재하는 리소스 값을 업데이트 할때 사용
@RestController
@RequestMapping("put-api")
public class PutController {
}
: POST 메서드와 마찬가지로 값을 HTTP Body에 담아 전달
⬇️ @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 객체를 활용한 PUT 메서드 구현
// http://localhost:8080/put-api/member1
⭐ return 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 형식으로 변환해서 전달하는 역할 수행
❓ 다시 공부하기 ❓
스프링 프레임워크에는 HttpEntity라는 클래스가 존재
: HttpEntity는 다음과 같이 헤더(Header)와 Body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행
: DELETE API는 웹 애플리케이션 서버를 거쳐 저장소에 있는
리소스를 삭제할 때 사용
서버에서는 클라이언트로부터 리소스를 식별할 수 있는 값을 받아서
리소스를 조회, 삭제하는 역할을 수행
⬇️ DeleteController 클래스
@RequestController
@RequestMapping("/delete-api")
public class DeleteController {
}
@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;
}
JSON은 (JavaScript Object Notation)의 줄임말로,
자바스크립트의 객체 문법을 따르는 문자 기반의 데이터 포맷입니다.
대체로 네트워크를 통해 데이터 전달할 때 사용
장점 : 문자열 형태로 작성 ➙ 파싱이 쉽다