GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API이다.
1. @RequestMapping으로 구현하기
@RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다. 그러나 GET형식의 요청만 받기 위해서는 어노테이션에 별도 설정이 필요하다.
@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";
}
}
2. 매개변수가 없는 GET 메서드 구현
별도의 매개변수 없이 GET API를 구현하는 경우이다. 매개변수가 없는 요청은 URL을 그대로 입력하고 요청할 때 스프링 부트 애플리케이션이 정해진 응답을 반환한다.
public class GetController {
// http://localhost:8080/api/v1/get-api/name
@GetMapping(value = "/name")
public String getName() {
return "Flature";
}
}
3. @PathVariable을 활용한 GET 메서드 구현
매개변수가 있는 GET 메서드 구현으로 매개변수를 받을 때 자주 쓰이는 방법 중 하나인 URL 자체에 값을 담아 요청하는 것이다. 요청 예시 URL을 보면 이 메서드는 중괄호({})로 표시된 위치의 값을 받아 요청하는 것을 알 수 있다. 값을 간단히 전달할 때 주로 사용하는 방법이며, GET 요청에서 많이 사용된다. 중괄호를 사용하여 어느 위치에서 값을 받을지 정해야하고 매개변수와 그 값을 연결하기 위해 @PathVariable을 명시하며, @GetMapping 어노테이션과 @PathVariable에 지정된 변수의 이름을 동일하게 맞춰야 한다.
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080/api/v1/get-api/variable1/{String 값}
@GetMapping(value = "/variable1/{variable}")
public String getVariable(@PathVariable String variable) {
return variable;
}
}
* @GetMapping 어노테이션에 지정한 변수의 이름과 메서드 매개변수의 이름을 동일하게 맞추기 어려울 때 다음과 같이 변수명을 지정한다.
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080/api/v1/get-api/variable2/{String 값}
@GetMapping(value = "/variable2/{variable}")
public String getVariable(@PathVariable("variable") String var) {
return var;
}
}
4. @RequestParam을 활용한 GET 메서드 구현
GET 요청을 구현할 때 URL 경로에 값을 담아 요청을 보내는 방법 외에도 쿼리 형식으로 값을 전달할 수도 있다. 즉, URI에서 '?'를 기준으로 '{키}={값}' 형태로 구성된 요청을 전송하는 방법이다. 매개변수 부분에 @RequestParam 어노테이션을 명시해 쿼리 값과 매핑하면 된다.
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080/api/v1/get-api/request1?name=value&email=value2&organization=value3
@GetMapping(value="/request1")
public String getRequestParam(@RequestParam String name, @RequestParam String email, @RequestParam String organization) {
return name + " " + email + " " + organization;
}
}
* 만약 쿼리스트링에 어떤 값이 들어올지 모른다면 Map 객체를 활용할 수도 있다.
@RequestMapping("/api/v1/get-api")
// http://localhost:8080/api/v1/get-api/request2?key1=value1&key2=value2
@GetMapping(value = "/request2")
public String getRequestParams2(@RequestParam Map<String, String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
}
위와 같은 형태로 코드를 작성하면 값에 상관없이 요청을 받을 수 있다. 예를 들어 회원 가입 관련 API에서 사용자는 회원 가입을 하면서 ID 같은 필수 항목이 아닌 취미 같은 선택 항목에 대해서는 값을 기입하지 않는 경우가 있다. 이러한 경우 매개변수의 항목이 일정하지 않을 수 있어 Map 객체로 받는 것이 효율적이다.
5. DTO 객체를 활용한 GET 메서드 구현
DTO란? Data Transfer Object의 약자로, 다른 레이어 간의 데이터 교환에 활용된다. 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체이다.
- 먼저 DTO 패키지를 생성하여 MemverDto 클래스를 생성한다.
package com.springboot.api.dto;
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 + '\'' +
'}';
}
}
@RequestMapping("/api/v1/get-api")
// http://localhost:8080/api/v1/get-api/request3?name=value1&email=value2&organization=value3
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto) {
// return memberDto.getName() + " " + memberDto.getEmail() + " " + memberDto.getOrganization();
return memberDto.toString();
}
}
DTO 클래스에는 전달하고자 하는 필드 객체를 선언하고 getter/setter 메서드를 구현한다. DTO 클래스에 선언된 필드는 컨트롤러의 메서드에서 쿼리 파라미터의 키와 매핑된다. 즉, 쿼리스트링의 키가 정해져 있지만 받아야할 파라미터가 많을 경우에는 DTO 객체를 활용해 코드의 가독성을 높일 수 있다.
참고 문헌: 스프링 부트 핵심 가이드(스프링 부트를 활용한 애플리케이션 개발 실무)
http://www.yes24.com/Product/Goods/110142898
스프링 부트 핵심 가이드 - YES24
입문자의 눈높이에 맞춰 차근차근 따라 하면서 배우는 스프링 부트 입문서!《스프링 부트 핵심 가이드》는 스프링 부트 기반의 애플리케이션을 개발할 때 필요한 기초적인 내용들을 소개하고,
www.yes24.com
'Back-end > Springboot' 카테고리의 다른 글
[SpringBoot] PUT API 만들기 (0) | 2023.05.03 |
---|---|
[SpringBoot] POST API 만들기 (0) | 2023.05.03 |
[SpringBoot] Hello World 출력하기 (0) | 2023.05.02 |
[SpringBoot] 스프링 부트의 동작 방식 (1) | 2023.05.02 |
[SpringBoot] 스프링 부트란? (0) | 2023.05.02 |