서버 개발 발 들이기 2

바람찬허파·2023년 9월 3일
0

API

고등학교 때부터 지겹게 들어왔지만, 그간 개념적으로 공부해보지 않았다.
'공공데이터 포털, IT 서비스들이 제공하며, 개발자가 API를 사용해 요청하고 그에 대한 응답을 받을 수 있다' 정도로 짐작하고 있었다.

API는 컴퓨터 프로그램끼리 어떻게 소통할지 약속 해 놓은 것이다.
정해진 약속을 통해 특정한 기능을 수행하게 된다.
GET API를 통해서 내가 요청하면 -> 상대방 컴퓨터가 필요한 정보를 리턴하는 것처럼.

아래는 두 숫자를 보내면, 덧셈 결과가 나오는 API에 대한 API Spec 이다.

API Spec (명세)

@RestController
해당 클래스를 API의 진입지점으로 만들어, 내부의 메소드를 API가 사용하도록 만든다.

@GetMapping("/add")
아래 함수를
HTTP 메소드가 ADD & HTTP path가 /add API로 지정함
GET /add 를 실행하면 -> 아래 함수가 실행되도록 함

@RequestParam
주어지는 쿼리를 파라미터에 넣음

@RestController
public class CalculatorController {

    @GetMapping("/add") // GET /add
    public int AddTwoNumbers(CalculatorAddRequest request){
        return request.getNum1() + request.getNum2();
    }

    @PostMapping("/multiply")

    public int MulTwoNumbers(@RequestBody CalculatorAddRequest request){
        return request.getNum1() * request.getNum2();
    }
}

POST MAN을 사용해, GET API를 테스트 해 보았다.

문제!
많은 값을 받을 때 파라미터를 받기 보다 -> 객체를 받는 것으로 수정이 필요하다 -> DTO

DTO


Data Transfer Objct
값을 받아서, 객체를 생성해 값을 집어 넣고 => API 진입지점으로 보내주는 역할을 한다.

@RestController
public class UserController {
    @PostMapping("/user") //Post /user시 아래에 있는 함수가 호출
    public void saveUser(@RequestBody  UserCreateRequest userCreateRequest) {
        System.out.println(userCreateRequest.getName());
        System.out.println(userCreateRequest.getAge());
    }
}

도서관 회원 생성 / 조회 예제

백문이 불여일타... 왜 dto가 필요한지, 지금 내가 짜고 있는 컨트롤러가 웹 페이지의 UI와 어떻게 상호작용 하는지 한 번에 이해가 갔다.

웹에서 데이터 입력 후 버튼 클릭 > POST /user API 실행 > @PostMapping("/usr") 어노테이션 아래의 함수 saveUser수행 > @RequestBody 요청 패킷의 body에 담긴 json 데이터가 객체 형태로 userCreateRequest에 저장됨. > 해당 객체의 getter 메소드가 실행 됨.


import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {
    private final List<User> users = new ArrayList<>();
    @PostMapping("/user") //Post /user시 아래에 있는 함수가 호출
    public void saveUser(@RequestBody  UserCreateRequest request) {

        users.add(new User(request.getName(), request.getAge()));
    }

    @GetMapping("/user")
    public List<UserResponse> getUsers(){
        List<UserResponse> userResponseList = new ArrayList<>();
        for (int i = 0; i < users.size(); i++) {
            userResponseList.add(new UserResponse(i, users.get(i)));
        }
        return userResponseList;
    }

} 

추가

추가적으로, FE 영역에서 버튼을 클릭했을 때 어떻게 POST /user API가 실행되었는지 궁금
여기서 API가 정확히 어떤 것을 이야기 하는거지 궁금하다.
POST API

0개의 댓글