ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Controller API
    Project/Blog Project 2022. 9. 10. 22:56

     

    한 눈에 알아보고 읽을 수 있어야 한다.

    @RestController
    @RequiredArgsConstructor
    @RequestMapping("/api/v1/members")
    public class MemberController {
    
        private final MemberService memberService;
    
        // create
        @PostMapping
        public ResponseEntity<JoinResponseDto> join(@Valid @RequestBody JoinRequestDto dto) {
            .
            .
            .
            return ResponseEntity.status(HttpStatus.CREATED).body( . . . ); // http api status 201
        }
    
        // read
        @GetMapping("/{memberId}")
        public ResponseEntity<MemberResponseDto> getMember(@Valid @PathVariable Long memberId) {
            .
            .
            .
            return ResponseEntity.ok().body( . . . ); // http api status 200
        }
    
        // update
        @PatchMapping
        public ResponseEntity<Void> edit(@Valid @RequestBody MemberUpdateRequestDto dto) {
            .
            .
            .
            return ResponseEntity.ok().build(); // http api status 200
        }
    
        // delete
        @DeleteMapping("/{memberId}")
        public ResponseEntity<Void> delete(@Valid @PathVariable Long memberId) {
            .
            .
            .
            return ResponseEntity.noContent().build(); // http api status 204
        }
    
        // findAll
        @GetMapping
        public ResponseEntity<Page<MemberResponseDto>> getMembers( . . . ) {
            .
            .
            .
            return ResponseEntity.ok().body( . . . ); // http api status 200
        }
    }

     

    API 순서대로 읽었을 때 의미가 직관적이어야 한다.

    @RequestMapping("/api/v1/members")
    @GetMapping
    : /api/v1/members 요청명에 따라 매핑(Get)하는 작업을 한다.

    @PostMapping

    : 생성(Post)하는 작업을 한다.

    @PatchMapping
    : 수정(Patch)하는 작업을 한다.

    @DeleteMapping
    : 삭제(Delete)하는 작업을 한다.

     

    메소드명 역시 무슨 기능을 담고 있는 지 한 번에 파악할 수 있어야 한다.

    join :  member create (가입)
    edit :  member update (정보 수정)
    delete :  member delete (탈퇴)
    getMember :  member read (특정 회원 조회)
    getMembers :  member all read (모든 회원 조회)

     

    Controller 에서 return 받을 때에는 http api status 를 따라야 한다.

    create :  http api status 201
    ResponseEntity.status(HttpStatus.CREATED).body( . . . );

    read :  http api status 200
    ResponseEntity.ok().body( . . . );

    update :  http api status 200
    ResponseEntity.ok().build();

    delete :  http api status 204 (데이터를 삭제하고 나면 보여줄 것이 없기 때문)
    ResponseEntity.noContent().build();

    findAll :  http api status 200
    ResponseEntity.ok().body( . . . );

     

    또한, Entity 객체 자체를 return 하지 않도록 하자.

    보안 문제가 생길 수 있으므로 중요한 정보를 제외한 ResponseDto 객체를 만들어서 넘겨주어야 한다.

    그리고 타입 안정성을 위해 ResponseEntity<ResponseDto> 제네릭을 꼭 사용해주자.

    넘겨 받을 게 없을 시엔, Void 로 해주어도 된다.

    // create
    @PostMapping
    public ResponseEntity<JoinResponseDto> join(@Valid @RequestBody JoinRequestDto dto) { ... }
    
    // read
    @GetMapping("/{memberId}")
    public ResponseEntity<MemberResponseDto> getMember(@Valid @PathVariable Long memberId) { ... }
    
    // update
    @PatchMapping
    public ResponseEntity<Void> edit(@Valid @RequestBody MemberUpdateRequestDto dto) { ... }
    
    // delete
    @DeleteMapping("/{memberId}")
    public ResponseEntity<Void> delete(@Valid @PathVariable Long memberId) { ... }
    
    // findAll
    @GetMapping
    public ResponseEntity<Page<MemberResponseDto>> getMembers( . . . ) { ... }

     

Designed by Tistory.