요번에는 각 HTTP 메서드에 해당하는 API를 개발 해보겠습니다. 데이터베이스는 설치하지 않고 외부의 요청을 받아 응답하는 기능을 구현해서 컨트롤러가 어떻게 구성되는지 알아보도록 하겠습니다.
요번에도 spring initializr를 사용해 프로젝트를 생성 합니다.
GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API 입니다. GET API를 작성하는 방법은 다양합니다.
위와 같이 controller 패키지를 생성하고 GetController 클래스를 생성 해 줍니다.
@RestController 와 @RequestMapping을 붙여 내부에 선언되는 메서드에서 사용할 공통 URL을 설정 해 줍니다.
클래스 수준에서 @RequestMapping을 설정하면 내부에 선언한 메서드의 URL 리소스 앞에 @RequestMapping의 값이 공통 값으로 추가 됩니다.
@RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받습니다. GET형식의 요청만 받기 위해서는 어노테이션에 별도 설정이 필요합니다.
위의 사진같이 @RequestMapping 어노테이션의 method 요소의 값을 RequestMethod.GET으로 설정하면 요청 형식을 GET으로만 설정할 수 있습니다.
스프링 4.3버전 이후로는 @RequestMapping을 사용하지 않고 HTTP 메서드에 맞는 @GetMapping,@PostMapping,@PutMapping,@DeleteMapping 어노테이션을 사용합니다.
테스트를 진행하면 잘 나오는것을 확인 할 수 있습니다.
별도의 매개변수 없이 GET API를 구현하는 경우
이렇게 메소드 요소 값을 설정해주지 애플리케이션이 정해진 응답을 합니다. 그리고 HTTP의 모든 요청도 받게 됩니다.
실무 환경에서는 매개변수를 받지 않는 메서드가 거의 쓰이지 않음.
대부분 매개변수를 받는 메서드를 작성.
매개변수를 받을 때 자주 쓰이는 방법 중 하나는 URL 자체에 값을 담아 요청 하는 방법 입니다.
위의 사진에서 주석에 있는 URL 보면 이 메서드는 마지막에 중괄호({})로 표시된 위치의 값을 받아 요청 합니다. 실제 요청시에는 중괄호는 없고 값만 입력하면 됩니다. 값을 간단히 전달할 때 주로 사용하고 GET 요청에서 많이 사용되는 방법 입니다.
이러한 방식으로 코드를 작성할 때 지켜야 하는 규칙이 몇가지 있는데 @GetMapping 어노테이션의 값으로 URL을 입력할때 중괄호를 사용해 어느 위치에 값을 받을지 지정해야하고 메서드의 매개변수와 그 값을 연결하기 위해서 @PathVariable을 명시하고 두 변수를 동일하게 작성해야 합니다.
위의 사진과 같이 URL 마지막 자리에 3을 입력하니 BODY부분에 3이 출력되는 것을 볼 수 있습니다.
만약 @GetMapping 변수와 메서드 매개변수의 이름을 동일하게 작성하기 어렵다면 @PathVariable 뒤에 괄호를 열어 @GetMapping의 변수를 적어주면 됩니다. @PathVariable(value = @GetMapping의 변수) 이렇게 작성 가능하고 value는 생략 가능 합니다.
GET 요청을 구현할 떄 앞에서 살펴본 방법 이외에도 쿼리 형식으로 값을 전달할 수 있습니다. URL 에서 ? 을 기준으로 key = value 형태로 구성된 요청을 전송하는 방법입니다. 애플리케이션에서 이 같은 형식을 처리하려면 @RequestParam을 사용하는데 매개변수 부분에 @RequestParam 어노테이션을 명시해 쿼리 값과 매핑하면 방법 입니다.
코드 사진 입니다.
요청한 결과 입니다. 작성한 것과 같이 잘 나오는것을 확인 할 수 있습니다.
만약 쿼리스트링에 어떤 값이 들어올지 모른다면 Map객체를 활용 할 수 있습니다.
위와 같이 Map 객체를 사용하면 값에 상관없이 요청을 받을 수 있는 장점이 있고 실제 어떤 정보를 입력하는 서비스에서 필수가 아닌 항목을 적지 않으면서 매개변수의 항목이 일정하지 않아 Map 객체로 받는 것이 효율적 입니다.
이렇게 요청 결과를 받은 것을 확인 할 수 있습니다.