5. API를 작성하는 다양한 방법-1

구보선·2023년 1월 20일
0

스프링부트

목록 보기
3/9

5.2 GET API만들기

GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API이다.
GET API를 작성하는 방법은 다양하지만 해당 포스팅에선 애플리케이션으로 들어오는 여러 요청에 대한 처리 방법의 하나로서 소개하려한다.

우선 스프링부트는 처음이기에 해당 코드를 설명해보려 한다.
위의 코드는 GetController클래스를 생성하는 코드이다. 여기서 @RestController 어노테이션은 해당 클래스가 REST API를 처리하는 컨트롤러로 등록해준다.
@RequestMapping은 리소스를 설정하는 어노테이션으로 괄호안에 입력하는 값에 따라 URI가 localhost:8080/path로 설정된다.
위의 두개의 어노테이션을 통해 GetController 클래스가 기본 URI를 http://lacalhost:8080/api/v1/get-api로 생성되고, Get request가 들어오면 안에 작성될 method가 실행될 것이다.

5.2.1 @RequestMapping으로 구현하기

@RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받게 된다. 따라서 GET형식의 요청만을 받기 위해서는 어노테이션에 별도의 설정이 필요하다.

위에서 작성된 코드는 Talend API Tester를 통해 실행시켰다.
@RequestMapping어노테이션은 특별히 활용해야되는 내용이 아니라면 아래의 각 HTTP 메소드에 맞는 어노테이션이 사용된다.
GetMapping, PostMapping, PutMapping, DeleteMapping

5.2.2 매개변수가 없는 GET 메소드 구현


매개변수가 없는 요청은 위 예제 코드의 URL을 그대로 입력하고 요청할 때 스프링 부트 애플리케이션이 정해진 응답을 반환한다.
(웹 통신의 기본목적은 데이터를 주고받는 것이기 때문에 실무에서는 거의 쓰이지 않는 방식)

5.2.3 @PathVariable을 활용한 GET 메소드 구현

매개변수를 받을 때, 자주 쓰이는 방법 중 하나는 URL 경로에 값을 담아 요청을 보내는 것이다.


이는 값을 간단히 전달할 때 주로 사용되는 방식으로, GET요청에서 많이 사용된다.

위의 코드 요청 예시 URL을 보면 이 메소드는 중괄호로 ({})표시된 위치의 값을 받아 요청하는 것을 알 수 있다.(실제 요청시에는 중괄호가 들어가지 않음)

이러한 방식으로 코드를 작성할 때에는 지켜야할 규칙이 있다.

  • @GetMapping 어노테이션의 값으로 URL을 입력할 때는 중괄호를 사용해 어느 위치에서 값을 받을지 지정해야 한다.

  • 메소드의 매개변수와 그 값을 연결하기 위해 @PathVariable을 명시하며, @GetMapping어노테이션과 @PathVariable에 지정된 변수의 이름을 동일하게 맞춰야한다.

    //http://localhost:8080/api/v1/get-api/variable1/{variable}
    @GetMapping(value="/variable1/{variable}")
    public String getVariable1(@PathVariable String variable){
    return variable;
    }

만약 @GetMapping어노테이션에 지정한 변수 이름과 메소드 매개변수의 이름을 동일하게 맞추기 어렵다면 @PathVariable 뒤에 괄호를 열어 @GetMapping 어노테이션의 변수명을 지정한다.

@GetMapping(value="/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var){
return var;
}

2번 줄에 적혀 있는 변수명인 variable과 3번 줄에 적힌 매개변수명인 var이 서로 일치하지 않는 상황에서 두값을 매핑하는 방법이다.
@PathVariable에는 변수이름을 특정할 value요소가 존재하며, 이 위치에 변수 이름을 정의하면 매개변수와 매핑할 수 있다.
이를 풀어쓰면 아래와 같다.
public String getVariable2(@PathVariable(value="variable")String var){

5.2.4 @RequestParam을 활용한 GET 메소드 구현

GET 요청을 구현할 때 앞서 살펴본 방법처럼 URL 자체에 값을 담아 요청하는 방법 외에도 쿼리 형식으로 값을 전달할 수 있다.
즉, URI에서 '?'를 기준으로 우측에 '{키}={값}' 형태로 구성된 요청을 전송하는 방법이다.
애플리케이션에서 이 같은 형식을 처리하기 위해서는 @RequestRaram을 활용하면 되는데, 아래와 같이 매개변수 부분에 @RequestParam 어노테이션을 명시해 쿼리 값과 매핑하면 된다.

  • @RequestRaram 어노테이션은 파라미터 값과 이름을 함께 전달한다. 따라서 게시판 등에서 페이지 및 검색정보를 함께 전달하는 방식을 사용할 때 많이 사용되며, url뒤에 붙은 파라미터 값을 가져올 때 사용된다.


name=value1&email=value2&organization=value3

'?'오른쪽에 쿼리스트링(query string)이 명시되어 있다. 쿼리스트링에는 키(변수의 이름)가 모두 적혀 있기 때문에 이 값을 기준으로 메소드의 매개변수에 이름을 매핑하면 값을 가져올 수 있다.

@RequestParam("name") String name 이렇게 작성해도 됨
("실제값")!!

아래와 같이 키와 @RequestParam 뒤에 적는 이름을 동일하게 설정하기 어렵다면 value요소(실제값?)로 매핑할 수 있다.

만약 회원 가입 관련 API에서 사용자는 회원가입을 하면서 ID와 같은 필수 항목이 아닌 취미 선택 항목에 대해서는 값을 기입하지 않는 경우가 있다. 이와 같이 쿼리스트링에 어떤 값이 들어올지 모르는 상황(매개변수의 항목이 일정하지 않는 상황)이라면 MAP객체를 활용할 수 있다.



위와 같이 코드를 작성하면 값에 상관없이 요청을 받을 수 있다.

NOTE. URI와 URL의 차이

URL은 윌가 흔히 말하는 웹 주소리소스가 어디에 있는지 알려주기 위한 경로를 의미, 웹에서는 URL을 통해 리소스가 어느 서버에 위치해 있는지 알 수 있다.

URI는 특정 리소스를 식별할 수 있는 식별자를 의미한다.

URL을 통해 리소스가 어느 서버에 위치해 있는지 알았다면, 그 서버에 접근해서 리소스에 접근하기 위해 대부분 URI가 필요하다.

0개의 댓글