[2주차] 개발일지 (2-11) API : POST / PUT / DELETE (後)

안녕! 안녕!
오늘은 필자의 승모근 통증으로 인해 미처 다뤄보지 못했던 API의 나머지 기능!
POST / PUT / DELETE 기능에 대해 이야기를 해보자.
누누히 말하는 거지만 각 기능들을 C.R.U.D와 연계해서 이해하는 습관을 들이도록 하자.
그럼
시 ~~~ 작..!
1. POST
API란 서버와 클라이언트 간 이루어지는 모든 요청 (Request) 및 응답 (Response)에 관한
일종의 약속 내지 규정이라고 할 수 있다.
POST는 SQL에서 테이블을 생성 (CREATE)하는 기능과 유사하다.
다음 소스코드를 살펴보도록 하자.
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
// PostMapping을 통해서, 같은 주소라도 방식이 다름을 구분합니다.
@PostMapping("/api/courses")
public Course createCourse(@RequestBody CourseRequestDto requestDto) {
// requestDto 는, 생성 요청을 의미합니다.
// 강의 정보를 만들기 위해서는 강의 제목과 튜터 이름이 필요하잖아요?
// 그 정보를 가져오는 녀석입니다.
// 저장하는 것은 Dto가 아니라 Course이니, Dto의 정보를 course에 담아야 합니다.
// 잠시 뒤 새로운 생성자를 만듭니다.
Course course = new Course(requestDto);
// JPA를 이용하여 DB에 저장하고, 그 결과를 반환합니다.
return courseRepository.save(course);
}
상단 코드는 requestDto 값을 얻어오기 위한 DTO 클래스이다.
하단 코드가 POST 방식의 예제 코드라고 할 수 있겠다.
복잡해보이지만 딱 두 군데만 눈 크게 뜨고 쳐다보면 된다.
@PostMapping(...)
return courseRepository.save(course);
어노테이션을 선언한 후에 테이블을 새롭게 생성해주기 위한 클래스를 따로 만들어준다.
자세한 내용은 코드주석에 다 딸려있으니 그거 참고하시고..
마지막으로 리턴값으로 courseRepository.save() 메서드를 사용하여 UPDATE된 값을 DB에 저장하는 작업까지 마무리 해준다.
CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "홍길동");
courseService.update(1L, requestDto);
courseList = courseRepository.findAll();
for (int i = 0; i < courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println(course.getId());
System.out.println(course.getTitle());
System.out.println(course.getTutor());
}
이미지 파일 참조.. 수구
2. PUT
SQL의 UPDATE기능과 유사하다.
이전 시간에 사용한 ARC를 통해 한 눈에 보도록 할까?
다음은 소스코드..
@PutMapping("/api/courses/{id}")
public Long updateCourse(@PathVariable Long id, @RequestBody CourseRequestDto requestDto) {
return courseService.update(id, requestDto);
}
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, CourseRequestDto requestDto) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(requestDto);
return course1.getId();
}
이번에도 딱 두 부분만 주목해라.
@PutMapping(...)
return couseService.update(id, requestDto);
3. DELETE
SQL에서 테이블 로우의 값을 삭제하는 기능과 유사하다.
@DeleteMapping("/api/courses/{id}")
public Long deleteCourse(@PathVariable Long id){
courseRepository.deleteById(id);
return id;
}
저 @PathVariable을 선언해준 이유는 Long 타입 id 변수 단독으로 값을 저장할 수는 없기 때문읾..
여기까지 다뤄봤으면 됐다. 수구..
