개발 공부 기록/02. Spring Boot

SpringBoot 환경에서 API 만들어보기 - GET, POST

박세류 2023. 12. 4. 21:42
스프링 부트에서 API를 개발하려고 하는 클래스에는 가장 위에 @RestController를 적어줘야 한다.
@RestController에서 getter가 있는 객체를 반환하면 JSON으로 반환해준다.

 

이는 클래스를 api의 진입 지점으로 만드는 것이고, 이 클래스 안에 메소드에 접근할 수 있다.

 

1. GET API 만들기

아래는 간단한 덧셈을 하는 코드이다.

@RestController
public class CalculatorController {

    @GetMapping("/add") // GET /add
    public int addTwoNumbers(@RequestParam int number1, @RequestParam int number2){
        return number1 + number2;
    }
}

@RequestParam?

  • 주어지는 쿼리(GET 요청 시에 URI 주소로 들어오는 값)를 함수 파라미터( number1, number2 )에 넣는다는 뜻이다.

위와 같이 postman으로 실행 시 응답을 잘 반환해 줌을 확인할 수 있다.

 

변수가 아닌 객체로 받을 수는 없나요?

-> 있다. DTO로 만들면 된다.

DTO란 Data Transfer Object로써 데이터를 외부에서 컨트롤러로 전달하는 역할을 하는 객체이다.
package com.group.libraryapp.dto.calculator.request;

public class CalculatorAddRequest {
    private final int number1;
    private final int number2;

    public CalculatorAddRequest(int number1, int number2) {
        this.number1 = number1;
        this.number2 = number2;
    }

    public int getNumber1() {
        return number1;
    }

    public int getNumber2() {
        return number2;
    }
    
}

이와 같이 DTO 클래스를 생성해 준다.

 

이후, API 코드를 다음과 같이 수정해 준다.

@RestController
public class CalculatorController {

    @GetMapping("/add")
    public int addTwoNumbers(CalculatorAddRequest request) {
        return request.getNumber1() + request.getNumber2(); 
    }
}

 이러면 똑같이 작동한다. 변수가 많아질 경우 이와 같이 객체로 하면 깔끔하게 구현할 수 있다.

 

2. POST API 만들기

POST는 uri에 데이터를 담아 보내는 GET 방식과 달리 BODY 부분에 json으로 데이터를 담아 보내면 된다.

 

이번에도 DTO로 값을 받아보도록 하겠다.

public class CalculatorMultiplyRequest {

    private int number1;
    private int number2;

    public int getNumber1() {
        return number1;
    }

    public int getNumber2() {
        return number2;
    }
}

 

컨트롤러도 다음과 같이 추가해준다.

@RestController // 주어진 Class를 Controller로 등록한다.
public class CalculatorController {

    @PostMapping("/multiply") // POST /multiply
    public int multiplyTwoNumbers(@RequestBody CalculatorMultiplyRequest request) {
        return request.getNumber1() * request.getNumber2();
    }
}

 

여기서, @RequestBody 어노테이션을 사용해야 @RequestParam마냥 Body로 오는 값을 받을 수 있다.!

 

Postman으로 테스트 시 HTTP 메시지 요청과 응답을 주고 받음을 확인 할 수 있다. 굿굿

반응형