-
Notifications
You must be signed in to change notification settings - Fork 0
REST API에 적합한 URL 수정
김무건 edited this page Aug 28, 2023
·
4 revisions
- 프로젝트를 진행하면서 REST API의 설계 원칙에 맞지 않는 문제점이 발생을 하였다.
-
리소스 중심 (Resource-Centric) API의 주요 요소는 서버에서 관리되는 리소스입니다. 각 리소스는 고유한 URI(Uniform Resource Identifier)로 식별되며, 이러한 리소스에 대한 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행할 수 있어야 합니다.
-
URI 설계 URI는 직관적이고 의미 있는 이름으로 구성되어야 합니다. 리소스를 나타내는 경로 구조를 통해 계층적인 구조를 표현할 수 있습니다. 또한, 동사보다는 명사를 사용하여 리소스에 접근하도록 합니다.
-
HTTP 메서드 활용 HTTP 메서드(GET, POST, PUT, DELETE 등)는 각각의 역할을 가지고 있습니다. GET은 리소스를 조회하고, POST는 리소스를 생성하며, PUT은 리소스를 업데이트하고, DELETE는 리소스를 삭제합니다. 올바른 메서드를 사용하여 기능을 구현하도록 합니다.
-
자체 표현 (Self-Descriptive) API 응답은 자체적으로 어떤 정보인지 이해할 수 있어야 합니다. HTTP 헤더를 적절히 활용하여 응답 형식, 인증, 캐싱 등의 정보를 전달하도록 합니다.
-
상태 무관 (Stateless) 서버는 각각의 요청을 별개의 요청으로 처리하며, 클라이언트의 상태 정보를 저장하지 않아야 합니다. 클라이언트의 모든 정보는 요청마다 제공되어야 합니다.
@PostMapping("/request/create")
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "게시글 상태 수정", description = "게시판 상태를 대기에서 승인으로 변경.")
@PostMapping("/request/approve")
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "게시판 글 조회", description = "게시글 id를 이용해 게시글을 조회")
@GetMapping("/request/{id}")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "내가 요청한 문제 조회", description = "내가 요청한 문제 조회")
@GetMapping("/request/mylist")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 전체 리스트 조회", description = "게시판 전체 리스트 조회")
@GetMapping("/request/list")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 업데이트", description = "단일 게시판 업데이트 / ROLE_CUSTOM', 'ROLE_ADMIN")
@PostMapping("/request/{id}")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 삭제", description = "단일 게시판 삭제 / ROLE_CUSTOM', 'ROLE_ADMIN'")
@PostMapping("/request/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
@RequestMapping("/api/request")
@Operation(summary = "게시판 문제 요청글 생성", description = "게시판 문제 요청글 생성. / ROLE_CUSTOM ")
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "게시글 상태 수정", description = "게시판 상태를 대기에서 승인으로 변경. / ROLE_ADMIN ")
@PutMapping("/approve")
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "게시판 글 조회", description = "게시글 id를 이용해 게시글을 조회 / PermitAll")
@GetMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "내가 요청한 문제 조회", description = "내가 요청한 문제 조회 / ROLE_CUSTOM', 'ROLE_ADMIN")
@GetMapping("/member")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 전체 리스트 조회", description = "게시판 전체 리스트 조회 / PermitAll")
@GetMapping("/requests")
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 업데이트", description = "단일 게시판 업데이트 / ROLE_CUSTOM', 'ROLE_ADMIN")
@PutMapping
@ResponseStatus(HttpStatus.OK)
@Operation(summary = "게시판 삭제", description = "단일 게시판 삭제 / ROLE_CUSTOM', 'ROLE_ADMIN'")
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)