GET API

Minseok Ku·2023년 1월 2일
0

Spring

목록 보기
5/5

GET API

GET API는 웹 어플리케이션 서버에서 값을 가져올 때 사용하는 APi이다.

실무에서는 HTTP 메서드에 따라 컨트롤러 클래스 구분 X

Controoller 패키지와 GetController 클래스를 생성한다.

GetController에 @RestController와 @RequestMapping를 붙여 내부에 선언되는 메소드에서 사용할 공통 URL을 설정한다.

@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {

}

클래스 수준에서 @RequestMapping 을 설정하면 내부에 선언한 메소드의 URL 리소스 앞에 @RequestMapping의 값이 공통 값으로 추가된다.


@RequestMapping

@RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다.

GET 형식의 요청만 받기 위해서는 어노테이션이 별도로 필요하다. @RequestMapping 어노테이션의 method 요소의 값을 RequestMethod.GET 으로 설정하면 요청 형식을 GET으로만 설정할 수 있다.

    // http://localhost:8090/api/v1/get-api/hello
    @RequestMapping(value = "hello", method = RequestMethod.GET)
    public String getHello() {
        System.out.println("GetController.getHello");
        return "HELLO SPRING!";
    }

스프링 4.3 버전 이후로는 새로 나온 어노테이션을 사용하기에 @RequestMapping 어노테이션은 더 이상 사용되지 않는다.


매개변수가 없는 GET Method

별도의 매개변수 없이 GET API를 구현하는 경우는 다음과 같다

    // http://localhost:8090/api/v1/get-api/name
    @GetMapping(value = "/name")
    public String getName() {
        System.out.println("GetController.getName");

        return "Flature";
    }

매개변수가 없는 요청은 스프링부트 어플리케이션이 정해진 응답을 변환한다.


@PathVariable

매개변수를 받을 때 자주 쓰이는 URL 자체에 값을 담아 요청하는 것이다.

    // http://localhost:8090/api/v1/get-api/variable1/String 값
    @GetMapping(value = "/variable1/{variable}")
    public String getVariable(@PathVariable String variable) {
        System.out.println("GetController.getVariable");

        return variable;
    }

@Getmapping의 어노테이션 값으로 URL을 입력할 때 중괄호를 통해 어느 위치에 값을 받을지 지정해야 한다.
@Getmapping의 어노테이션과 @PathVariable에 지정된 변수 이름 동일해야 한다.

@PathVariable의 변수를 다르게 하고 싶을 경우

    // http://localhost:8090/api/v1/get-api/variable2/test
    @GetMapping(value = "/variable2/{variable}")
    public String getVarable2(@PathVariable("variable") String var) {
        System.out.println("GetController.getVarable2");

        return var;
    }

변수 variable과 매개변수 var가 서로 일치하지 않아도 두 값을 mapping할 수 있다.
@PathVariable에서는 변수의 이름을 특정 할 수 있는 value 요소가 존재하며, 이 위치에 변수 이름을 정의하면 매개변수와 mapping할 수 있다.


@RequestParam

GET 요청을 구현할 때 URL 경로에 값을 담아 보내는 요청 외에도 쿼리 형식으로도 값을 전달 할 수 있다.

즉 URL에서 '?'를 기준으로 '키=값' 형태로 구성된 요청을 전송하는 방법이다.

    // http://localhost:8090/api/v1/get-api/request1?name=testname&email=testemail&organization=testorga
    @GetMapping(value = "/request1")
    public String getrequestParam1(@RequestParam String name, @RequestParam String email, @RequestParam String organization) {
        System.out.println("GetController.getrequestParam1");


        return name + "" + email + "" + organization;
    }

?키=값&키=값&키=값 형태로 요청

쿼리스트링에 어떤 값이 들어올지 모를 경우

Map을 활용할 수 있다.

    // http://localhost:8090/api/v1/get-api/request2?name=test&value=12312
    // 쿼리스트링에 어떤 값이 모를 때 사용,
    @GetMapping(value = "/request2")
    public String getRequestParam2(@RequestParam Map<String, String> param) {
        System.out.println("GetController.getRequestParam2");

        StringBuilder sb = new StringBuilder();

        param.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "\n");
        });

        return sb.toString();
    }

  • 사용 예시

회원 가입 API에서 ID같은 필수 항목이 아닌 취미 선택 항목에 대해서는 값을 기입하지 않는 경우가 많은데, 이때 Map 객체로 받는 것이 효율적이다.

URI와 URL의 차이

url은 리소스가 어디있는지 알려 주는 경로,uri는 특정 리소스를 식별할 수 있는 식별자


DTO 객체를 활용한 GET메서드 구현

DTO와 VO

DTO(Data Transfer Object)

다른 레이어 간의 데이터 교환에 활용됨.
각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체.

Vo(Value Object)

데이터 그 자체로 의미가 있는 객체를 의미한다.
특징은 읽기전용(Read-Only)로 설계한다는 것.
값을 변경할 수 없게 만들어서 데이터의 신뢰성을 유지해야 한다.

package com.springboot.api.dto;

import lombok.Data;
@Data //@Getter / @Setter, @ToString, @EqualsAndHashCode와 @RequiredArgsConstructor 를 합쳐놓은 종합 선물 세트
public class MemberDto {

    //
    private String name;
    private String email;
    private String organization;


}
  • dto 클래스에 선언된 변수는 컨트롤러 메서드에서 쿼리 파라미터의 키와 매칭 된다.

  • 받아야 할 파라미터가 많은 경우 코드의 가독성을 높이기 위해 사용한다.

    // http://localhost:8090/api/v1/get-api/request3?name=test&email=testmail&organization=testorg
    @GetMapping(value = "/request3")
    public String getRequestParam3(MemberDto memberDto) {
        System.out.println("GetController.getRequestParam3");


        // return memberDto.getName() + "" + memberDto.getEmail() + "" + memberDto.getOrganization(); 이렇게 작성하지 않아도 됨
        return memberDto.toString();
    }

0개의 댓글