[Spring] Get API 작성

WOOK JONG KIM·2022년 10월 25일
0
post-thumbnail

Get API

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

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

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

@RequestMapping을 설정하면 내부에 선언한 메서드의 URL 리소스 앞에 값을 공통으로 추가

이를 별다른 설정 없이 사용하면 HTTP 모든 요청을 받음
-> 보통 용도에 맞게 @PutMapping, @PostMapping 과 같은 어노테이션 사용

@PathVariable을 활용한 API 메서드

// http://localhost:8080/api/v1/get-api/variable1/{String 값}
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {

    @GetMapping(value = "/variable1/{variable}")
    public String getHello(@PathVariable String variable ){
        return variable;
    }
}

@Getmapping의 어노테이션 값으로 URL을 입력할 때 중괄호를 통해 어느 위치에 값을 받을지 지정해야 함

@GetMapping의 어노테이션과 @PathVariable에 지정된 변수 이름 동일하게 맞춰야 함

변수 이름 다르게 하고 싶은 경우

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

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

@PathVariable에서 변수 이름을 특정!

@RequestParam을 활용한 Get 메서드 구현

Get요청을 보낼 때 URL 경로에 값을 담아서 보내는 방법 외 쿼리 형식으로 값을 전달할 수도 있음

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

    @GetMapping(value = "/request1")
    public String getHello(@RequestParam String name, @RequestParam String email,
                           @RequestParam String organization){
        return name + " " + email + " " + organization;
    }
}

?name = ... , email... 쿼리 형태로 요청

어떠한 값이 들어올지 모른다면 Map 객체 활용 가능

package com.springboot.api.controller;

import org.springframework.web.bind.annotation.*;

import java.util.Map;

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

    @GetMapping(value = "/request1")
    public String getHello(@RequestParam Map<String, String> param){
        System.out.println(param); // {name=value1, email=value2, organization=value3}
        StringBuilder sb = new StringBuilder();

        param.entrySet().forEach(map ->{
            sb.append(map.getKey() + "가 키 값이고" + map.getValue() + "가 해당 값입니다. \n");
        });

        return sb.toString();
    }
}

사용 예시

회원가입 관련 API에서 사용자는 회원 가입을 하면서 ID같은 필수 항목이 아닌 취미 같은 선택 항목에 대해서는 값을 기입하지 않는 경우 -> Map으로 받는 것이 효율적!

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

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

DTO(Data Transfer Object)

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

별도의 로직 포함 X

package com.springboot.api.dto;

import lombok.Data;

@Data // Getter,Setter, tostring 자동 구현
public class MemberDto {
    private String name;
    private String email;
    private String organization;
}

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

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

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

    @GetMapping(value = "/request1")
    public String requestParam(MemberDto memberDto){
        // return memberDto.getName() + getEmail() 이럴 필요 X
        return memberDto.toString();
    }
}

VO(Value Object)

보통은 DTO와 구분하지 않고 사용

VO는 데이터 자체로 의미가 있는 객체, 읽기 전용으로 설계 -> 값 변경 불가하게 만들어 신뢰성 유지

profile
Journey for Backend Developer

0개의 댓글