현의 개발 블로그

API 개발 연습하기 본문

스프링부트 실습/도서관리 웹 개발

API 개발 연습하기

hyun2371 2023. 4. 14. 19:32

GET API 개발하기

API 명세서

HTTP Method GET
HTTP Path /add
쿼리 int number1 / int number
API 반환 결과 두 숫자의 덧셈 결과

 

@RequestParam 사용하여 값을 전달 받기

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

 

@RequestParam은 쿼리에 입력된 전달인자를 함수 매개변수에 넣는다.

요청자가 ~/add?number1=10&number2=20을 입력하면, 매개변수들이 각각 매핑된다.

따로 명시하지 않으면, 전달인자와 매개변수 변수명이 일치해야 한다.

 

Postman에 다음과 같이 URL을 입력해준다.

API를 요청하는 서버가 내 컴퓨터이므로, localhost라고 입력해주었다. 스프링부트의 기본 port는 8080이다.

HTTP path가 /add이므로 추가해준다.

 

호출 결과 30이 나온다.

 

 

DTO를 사용하여 값을 전달받기

쿼리에 들어오는 인자들이 많아지면, controller 함수의 파라미터 값들도 많아진다.

이 때, 쿼리를 받는 request class를 따로 생성해 간단화할 수 있다.

 

요청과 응답을 위해 생성한 객체를 DTO(Data Transfer Object) 라고 부른다.

계층끼리 주고 받는 택배 상자라고 이해하면 된다.

 

Entity는 실제 DB와 매핑되지만, DTO는 요청과 응답에 필요한 값들만 들어간다.

 

 

number1, number2를 request로 받을 클래스를 생성하자

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

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

값을 매핑받기 위해 파라미터를 포함한 생성자가 꼭 필요하다.

 

 

이에 맞게 Controller를 변경하자.  @RequestParam은 사용하지 않으므로 삭제한다.

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

 

 

 

POST API 개발하기

두 수의 곱셈 결과를 반환하는 POST API를 작성할 것이다.

POST API는 값을 저장하는 기능이므로, 원래 POST로 작성하면 안된다.

연습을 위해 임의로 POST를 사용했다.

 

API 명세서

HTTP Method POST
HTTP Path /multiply
HTTP Body {"number1": 숫자, "number2": 숫자}
API 반환 결과 두 수의 곱셈 결과

 

 

앞에서 query를 사용했다면, 이번에는 body를 사용해 값을 전달받을 것이다.

body에 데이터를 입력할 때는 JSON을 사용한다.

 

JSON(JavaScript Object Notation)은 웹 통신에서 객체를 표기하는 기법이다.

중괄호 안에 "key" : value 형태로 표기한다.

 

 

 

이전에 생성한 함수 아래에 Post API 함수를 만들자

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

 

@RequestBody는 Http Body로 들어오는 JSON를 calculatorMultiplyRequest로 바꿔준다.

JSON Body의 변수명과 DTO의 변수명이 동일해야 한다.

 

 

전달 인자값을 받기 위해 DTO를 생성해준다.

@RequestBody를 사용할 때는 생성자를 만들지 않아도 괜찮다. (HTTP body를 객체로 바꾸기 때문)

@Getter
public class CalculatorMultiplyRequest {
    private int number1;
    private int number2;
}

 

PostMan에서 다음과 같이 호출하면 결과로 200이 나온다.

 

 

 

간단한 계산기 예제로 API 개발을 연습해보았다.

이제 다음 글에서 유저 조회 및 작성 API를 연습할 것이다.

 

 

DB없이 유저 API 개발하기

유저 생성 API 개발 유저의 이름과 나이를 입력하면, 유저가 생성되는 API를 개발할 것이다. API 명세서 HTTP Method POST HTTP Path /user HTTP Body {"name" : String(non null), "age": Integer} 반환 결과 반환 x User Entity

hyun-keepdeving.tistory.com

 


출처

 

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인

Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한 옵션들

www.inflearn.com

 

Comments