API 설계

두주·2023년 12월 20일
0

TIL

목록 보기
19/58

@RequestMapping("/courses/{courseId}/lectures")
@RestController
class LectureController {

    @PutMapping("/{lectureId}")
    fun updateLecture(
        @PathVariable courseId: Long,
        @PathVariable lectureId: Long,
        @RequestBody updateLectureResponse: UpdateLectureResponse
    ): ResponseEntity<LectureResponse> {
        TODO()
    }
}

뭔가 본격적인 시작에 앞서 이제 안오면 섭섭할 '위기'가 다시 찾아왔다.
코드를 구석구석 해석해 보려고 한다.

어노테이션이란?

먼저, @로 시작하는 어노테이션은 컴파일러나 프레임워크 등에게 특정한 의미나,
기능을 전달하는 역할을 한다.

@RequestMapping

어노테이션은 클래스나 메서드에 적용할 수 있으며, 다양한 속성을 통해 요청의 경로, 메서드, 헤더, 파라미터 등을 지정할 수 있다.
이 어노테이션을 사용하면 원하는 요청을 쉽고 유연하게 매핑할 수 있다.

@RestController

Rest Controller 어노테이션은 스프링 부트에서 RESTful API를 개발하기 위한 어노테이션이다.

이 어노테이션은 @Controller와 @ResponseBody를 합친 것으로,
컨트롤러의 메서드가 반환하는 값이 뷰 이름이 아니라 HTTP 응답의 본문으로 전달된다.

즉, 이 어노테이션을 사용하면 JSON이나 XML과 같은 데이터를 반환할 수 있다.
이 어노테이션은 @Component의 특수화된 형태이므로, 스프링 컨테이너에 빈으로 등록된다.

@PutMapping("/{lectureId}")

이 어노테이션은 이 함수가 HTTP PUT 메소드를 처리하는 것을 의미한다.
PUT 메소드는 리소스의 전체를 수정하는 데 사용된다.

@PathVariable courseId: Long,

첫 번째 매개변수이다.

@PathVariable이라는 어노테이션은 이 매개변수가 URI의 일부인 '경로 변수' 라는 것을 의미한다.

매개변수의 이름은 CourseId이고, Long 타입이다.

즉, 이 매개변수는 '코스의 아이디를 나타내는 정수값' 이라는 것을 알 수 있다.

@PathVariable lectureId: Long,

두 번째 매개변수이다.

이 역시 위와 같이 매개변수의 이름은 lectureId이고, Long 타입이다.

'강의의 고유 아이디를 나타내는 정수값' 이라는 것을 알 수 있다.

@RequestBody updateLectureResponse: UpdateLectureResponse
    ): ResponseEntity<LectureResponse>

@RequestBody는 이 매개변수가 HTTP 요청의 본문에 담긴 데이터 라는 것을 의미한다.

매개변수의 이름은 updateLectureResponse이고, 타입은 UpdateLectureResponse다.
즉, 이 매개변수는 강의를 수정하기 위한 정보를 담고 있는 객체이다.

반환 타입이

ResponseEntity <LectureResponse>

인데 강의를 수정한 결과를 담고 있는 객체를 HTTP 응답으로 반환한다는 뜻이다.

찾아보고 쓴 내용인데도 뭘 의미하는지 자세히 알기가 어렵다.

API는 프로젝트의 시작과 끝이라 불릴 정도로 중요하다고 하는 만큼
계속 보면서 익혀야될 것 같다.

또, URI들을 보다 보니 예전에 발생했던 문제가 생각나서 가져와 봤다.


방송통신대학 지원서 URL 중에 개인을 식별할 수 있는 정보가 담겨있는 내용이
URL에 그대로 노출되어, 이 정보를 하나씩 바꾸면 다른 사람들의 지원 정보를 볼 수 있었다.

이런 식으로 서로가 일치할 때에만 지원서 정보를 출력해 줬다면 문제가 발생하지 않았을 것이라고 한다.

내가 지금 하고있는게 요런 거 같은데 참고해야겟다.

profile
야옹.

0개의 댓글