REST API에서 GET이란 URI 주소를 통해 접속을 했을 때 서버에 데이터를 요청하는 메소드입니다
Method | 의미 | CRUD | 멱등성 | 안전성 | Path Variable | Query Parameter | DataBody |
GET | 리소스 취득 | R (Read) | O | O | O | O | X |
멱등성
멱등성은 요청의 효과라는 의미로, 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 함을 의미합니다.
예를 들어, A라는 행동을 여러 번 시도했을 때 결과가 항상 A인 것을 의미합니다.
안전성
안전성은 서버 측의 상태 정보를 변경하지 않는 메소드를 가리킵니다.
예를 들어, 구글에 접속을 100번 하더라도 서버 데이터는 변경되지 않습니다.
Path Variable
URI 주소에 변수를 포함하여 가변적인 주소를 설정할 수 있습니다. 이를 통해 특정 리소스를 지칭할 수 있습니다.
예시:
- 기본 주소: www.example.com
- 쇼핑 페이지: www.example.com/shopping
- 뉴스 페이지: www.example.com/news
서버에서 GET 요청을 처리하는 방법
import org.springframework.web.bind.annotation.*;
// 서버 라우터 어노테이션(annotation)
@RestController
public class RestApiApplicationController {
@GetMapping("/shopping")
public String shopping() {
return "쇼핑페이지";
}
@GetMapping("/news")
public String news() {
return "뉴스페이지";
}
}
현재 작성된 코드로는 "쇼핑페이지", "뉴스페이지"라는 텍스트 응답만 보내집니다.
실제 페이지를 보내기 위해서는 HTML, CSS, JS 작업을 완료한 후, @Controller를 통해 유저에게 전달해야 합니다.
지금은 기초적인 내용을 다루기 때문에, @RestController를 통해 URI로 GET 메소드가 서버에서 어떻게 응답하는지만 이해하면 충분합니다.
서버가 매핑할 수 있는 상세 주소
서버가 매핑할 수 있는 상세 주소라면 여러 개의 가변 주소를 받을 수 있습니다:
- www.example.com/shopping/sports/basketball (메인/쇼핑/스포츠/농구)
- www.example.com/shopping/sports/soccer/ball (메인/쇼핑/스포츠/축구/축구공)
- www.example.com/shopping/IT/Television (메인/쇼핑/IT/TV)
import org.springframework.web.bind.annotation.*;
@RestController
public class RestApiApplicationController {
@GetMapping("/shopping")
public String shopping() {
return "쇼핑페이지";
}
@GetMapping("/shopping/sports/{category}")
public String categorySports(
@PathVariable String category
) {
return "쇼핑/스포츠/" + category + "페이지";
}
@GetMapping("/shopping/sports/{category}/{subCategory}")
public String subSportsCategory(
@PathVariable String category,
@PathVariable String subCategory
) {
return "쇼핑/스포츠/" + category + "/"+ subCategory + "페이지";
}
@GetMapping("/shopping/IT/{category}")
public String categoryIT(
@PathVariable String category
) {
return "쇼핑/IT/" + category + "페이지";
}
@GetMapping("/news")
public String news() {
return "뉴스페이지";
}
}
{}를 통해 변수를 정의하고, 해당 값을 변수로 활용할 수 있습니다.
예를 들어, URI에 {category}가 있다면:
@GetMapping("/shopping/sports/{category}")
public String categorySports(@PathVariable String category) {
return "쇼핑/스포츠/" + category + "페이지";
}
이렇게 @PathVariable을 사용하여 해당 값을 받을 수 있습니다.
주의할 점은, URI에 정의한 변수 이름과 @PathVariable로 받는 변수 이름이 같아야 합니다. 만약 변수 이름을 다르게 하고 싶다면, @PathVariable(name = "URI에서 사용한 변수 이름")을 사용하여 지정할 수 있습니다.
예를 들어, {category}를 다르게 받으려면:
@RestController
public class RestApiApplicationController {
@GetMapping("/shop/{category}")
public String shopping(
@PathVariable(name = "category") String cate
) {
return cate;
}
}
Query Parameter
Query Parameter는 URI에서 특정한 조건을 주고 싶을 때 사용하는 매개변수입니다. 같은 API를 호출하더라도 조건으로 나열하는 것이 필요한 상황에서 사용됩니다. URL에 물음표(?)를 붙여 나타내며, 매개변수마다 and(&)로 구분된 key와 value로 구성되어 있습니다.
예시:
쇼핑 사이트에서 한 달 동안 인기 순위 10위까지만 GET 요청을 할 때:
www.example.com/shopping/sports?sort=ranking&date=month&limit=10
여기서 ?sort=ranking&date=month&limit=10이 Query Parameter입니다.
import org.springframework.web.bind.annotation.*;
@RestController
public class RestApiApplicationController {
@GetMapping("/shopping/sports")
public String rankingPage(
@RequestParam String sort,
@RequestParam String date,
@RequestParam int limit
) {
// 관련된 알고리즘 작성하기
if (sort.equals("ranking") && date.equals("month")) {
return "월별 Top" + limit + " 스포츠 페이지입니다";
}
else if (sort.equals("ranking") && date.equals("day")) {
return "일별 Top" + limit + " 스포츠 페이지입니다";
}
else if (sort.equals("new")) {
return "신상 스포츠페이지 입니다";
}
return "스포츠 페이지 입니다";
}
}
여러 개의 URL이 하나의 리소스를 가리킬 수 있습니다
path 매개변수 값으로 {} 안에 주소들을 전부 하나의 리소스를 가리킵니다
import org.springframework.web.bind.annotation.*;
@RestController
public class RestApiApplicationController {
@GetMapping(path = {"/shop", "/shopping", "/쇼핑"})
public String shopping() {
return "쇼핑 페이지 입니다";
}
}
여기서 주의해야 할 것은, 하나의 주소가 여러 개의 리소스를 가리킬 수는 없습니다.
여러 개의 주소가 하나의 리소스를 가리킬 수 있습니다.
Data Body
Data Body 부분은 다음 POST 메소드에서 설명하겠습니다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Web에서 응답 만드는 방법 - Response Entity (0) | 2024.07.02 |
---|---|
[Spring Boot] Rest API Put 메서드 + boolean is 변수명의 문제점 (0) | 2024.07.01 |
[Spring Boot] Rest API Post 메서드 (1) | 2024.07.01 |
[Spring Boot] Rest API GET 메소드(2) (0) | 2024.06.29 |
자바 백엔드 개발자가 알아야 할 지식 (0) | 2024.06.25 |