고등학교 때부터 지겹게 들어왔지만, 그간 개념적으로 공부해보지 않았다.
'공공데이터 포털, IT 서비스들이 제공하며, 개발자가 API를 사용해 요청하고 그에 대한 응답을 받을 수 있다' 정도로 짐작하고 있었다.
API는 컴퓨터 프로그램끼리 어떻게 소통할지 약속 해 놓은 것이다.
정해진 약속을 통해 특정한 기능을 수행하게 된다.
GET API를 통해서 내가 요청하면 -> 상대방 컴퓨터가 필요한 정보를 리턴하는 것처럼.
아래는 두 숫자를 보내면, 덧셈 결과가 나오는 API에 대한 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
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