728x90
5.1 GET API 만들기
GET API: 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API.
5.2.1 매개변수가 없는 GET 메서드 구현
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080/api/v1/get-api/hello
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String getHello() {
return "Hello World";
}
}
- @RequstMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다.
- GET 요청만 받기 위해서는 어노테이션에 별도 설정이 필요
- method = RequestMethod.GET - 스프링 4.3 버전 이후로는 새로 나온 어노테이션을 사용하기 때문에 @RequsetMapping 어노테이션은 불필요
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping

5.2.2 @Pathvariable 을 활용한 GET 메서드 구현
- 실무 환경에서 매개변수를 받지 않는 메서드가 거의 쓰이지 않는다.
- 웹 통신의 기본 목적은 데이터를 주고받는 것 때문에 대부분 매개변수를 받는 메서드를 작성하게 된다.
PathVariable 을 활용한 GET 메서드 구현
// <http://localhost:8080/api/v1/get-api/variable1/>{String 값}
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}
- 중괄호({})로 표시된 위치의 값을 받아 요청하는 것
- 값을 간단히 전달할 때 주로 사용하는 방법, GET 요청에서 많이 사용
- @GetMapping 어노테이션의 값으로 URL을 입력할 때 중괄호를 사용해 어느 위치에서 값을 받을지 정해야 함.
PathVariable에 변수명을 매핑하는 방법
// <http://localhost:8080/api/v1/get-api/variable2/>{String 값}
@GetMapping(value = "/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
return var;
}
- @PathVariable 에는 변수의 이름을 특정할 수 있는 value 요소가 존재
5.2.3 @RequsetParam을 활용한 GET 메서드 구현
@RequestParam을 활용한 GET 메서드 구현
- 쿼리 형식으로 값을 전달
- URI 에서 ‘?’ 를 기준으로 우측에 ‘{키}={값}’ 형태로 구성된 요청을 전송하는 방법
- 쿼리스트링에는 키가 모두 적혀 있기 때문에 이 값을 기준으로 메서드의 매개변수에 이름을 매핑하면 값을 가져올 수 있다.
// <http://localhost:8080/api/v1/get-api/request1?name=value&email=value2&organization=value3>
@GetMapping(value = "/request1")
public String getRequestParam1 (
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization ) {
return name + " " + email + " " + organization;
}
@RequestParam과 Map을 조합한 GET 메서드 구현
- 쿼리스트링에 어떤 값이 들어올지 모른다면 Map 객체를 활용할 수 있다.
- 회원 가입 API에서 필수 항목이 아닌 취미 같은 선택 항목에 대해서는 값을 기입하지 않는 경우가 있다. 이러한 경우에는 매개변수의 항목이 일정하지 않을 수 있어 Map 객체로 받는 것이 효율적입니다.
// <http://localhost:8080/api/v1/get-api/request2?key1=value1&key2=value2>
@GetMapping(value = "/request2")
public String getRequestParam2(@RequestParam Map<String, String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map-> {
sb.append(map.getKey() + " : " + map.getValue() + "\\n");
});
return sb.toString();
}

Tip URI와 URL의 차이
- URL: 웹 주소
- URI: 특정 리소스를 식별할 수 있는 식별자 웹에서는 URL을 통해 리소스가 어느 서버에 위치해 있는지 알 수 있으며, 그 서버에 접근해서 리소스에 접근하기 위해서는 대부분 URI가 필요하다.
5.2.4 DTO 객체를 활용한 GET 메서드 구현
- Data Transfer Object의 약자로, 다른 레이어 간의 데이터 교환에 활용
- 각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체
- 별도의 로직이 포함되지 않는다.
public class MemberDto {
private String name;
private String email;
private String organization;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getOrganization() {
return organization;
}
public void setOrganization(String organization) {
this.organization = organization;
}
@Override
public String toString() {
return "MemberDto{" +
"name='" + name + '\\'' +
", email='" + email + '\\'' +
", organization='" + organization + '\\'' +
'}';
}
}
// <http://localhost:8080/api/v1/get-api/request3?name=value&email=value2&organization=value3>
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto) {
//return memberDto.getName() +" " + memberDto.getEmail() + " " + memberDto.getOrganization();
return memberDto.toString();
}

5.2 POST API 만들기
- POST API는 웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API이다.
- POST API 에서는 저장하고자 하는 리소스나 값을 HTTP 바디에 담아 서버에 전달한다. 그래서 URI가 GET API에 비해 간단하다.
5.2.1 @RequestMapping으로 구현하기
@RequestMapping 사용 예
@RequestMapping(value = "/domain", method = RequestMethod.POST)
public String postExample() {
return "Hello Post API";
}

5.2.2 @RequestBody를 활용한 POST 메서드 구현
@RequestBody: HTTP의 Body 내용을 해당 어노테이션이 지정된 객체에 매핑하는 역할

- POST 형식의 요청은 클라이언트가 서버에 리소스를 저장하는 데 사용
- POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송
- 일반적으로 JSON 형식으로 전송
@RequestBody와 Map을 활용한 POST API 구현

DTO 객체를 활용한 POST API 구현
// <http://localhost:8080/api/v1/post-api/member2>
@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDto memberDto) {
return memberDto.toString();
}

위와 같이 @RequestBody를 사용하여 작성하면 MemberDto의 변수를 요청 메시지의 키와 매핑해 값을 가져온다.
5.3 PUT API 만들기
- 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리로스 값을 업데이트 하는 데 사용
- 리소스를 서버에 전달하기 위해 HTTP Body 를 활용
5.3.1 @RequestBody를 활용한 PUT 메서드 구현
@RequestBody와 Map을 활용한 PUT 메서드 구현
@RestController
@RequestMapping("/api/v1/put-api")
public class PutController {
//http://localhost:8080/api/v1/put-api/member
@PutMapping(value = "/member")
public String postMember(@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/api/v1/put-api/member1
@PutMapping(value = "/member1")
public String postMemberDto1 (@RequestBody MemberDto memberDto) {
return memberDto.toString();
}
//http://localhost:8080/api/v1/put-api/member2
@PutMapping(value = "/member2")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto) {
return memberDto;
}

DTO 타입

- RestController 어노테이션이 지정된 클래스는 @ResponseBody 를 생략할 수 있는데, @ResponseBody 어노테이션은 자동으로 값을 JSON과 같은 형식으로 변환해서 전달하는 역할을 수행
5.3.2 @ResponseEntity를 활용한 PUT 메서드 구현
HttpEntity 클래스
스프링 프레임워크에는 HttpEntity라는 클래스가 있다. HttpEntity는 다음과 같이 헤더(Header)와 Body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행
- RequestEntity와 ResponseEntity는 HttpEntity를 상속받아 구현한 클래스이다.
- ResponseEntity는 서버에 들어온 요청에 대해 응답 데이터를 구성해서 전달할 수 있게 한다.
- ResponseEntity는 HttpEntity로부터 HttpHeaders와 Body를 가지고 자체적으로 HttpStatus를 구현한다.
ResponseEntity를 활용한 PUT메서드 구현
5.4 DELETE API 만들기
- 웹 애플리케이션 서버를 거쳐 데이터베이스 등의 저장소에 있는 리소스를 삭제할 때 사용
- 서버에서는 클라이언트로부터 리소스를 식별할 수 있는 값을 받아 데이터베이스나 캐시에 있는 리소스를 조회하고 삭제하는 역할을 수행
5.4.1 @PathVariable과 @RequestParam을 활용한 DELETE 메서드 구현
@PathVariale을 활용한 DELETE 메서드 구현
// <http://localhost:8080/api/v1/delete-api/>{String 값}
@DeleteMapping(value = "/{variable}") // value 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다.
public String DeleteVariable(@PathVariable String variable) {
return variable;
}
- @DeleteMapping 어노테이션에 정의한 value의 이름과 메서드의 매개변수 이름을 동일하게 설정해야 삭제할 값이 주입된다.
@RequestParam을 활용한 DELETE 메서드 구현
// <http://localhost:8080/api/v1/delete-api/v1/delete-api/request1?email=value>
@DeleteMapping(value = "/request1")
public String getRequestParam1(@RequestParam String email) {
return "e-mail : " + email;
}
- @RequestParam 어노테이션을 통해 쿼리스트링 값을 받을 수 있다.
728x90
'Software > Spring Boot 핵심 가이드' 카테고리의 다른 글
[Spring boot] 인텔리제이에서 스프링부트 Swagger 설정하는 방법 (0) | 2023.05.08 |
---|---|
04_인텔리제이에서 스프링 부트 프로젝트 생성하기(애플리케이션 개발) (0) | 2023.05.07 |
03_2 인텔리제이 IDEA 설치하기 (0) | 2023.05.07 |
03_Mac OS에서 자바 JDK 설치하기 (0) | 2023.01.13 |
02_개발에 앞서 알면 좋은 기초 지식 (0) | 2022.11.28 |
댓글