prosource

Rest Controller의 모범 사례는 무엇입니까?

probook 2023. 7. 22. 10:11
반응형

Rest Controller의 모범 사례는 무엇입니까?

코드 규약에 따르면 컨트롤러에 논리가 없습니다.모두 서비스 계층에서 처리해야 합니다.제 질문은 특히 Response Entity를 반환하는 것에 관한 것입니다.

Rest Controller에서 처리해야 합니까, 아니면 서비스 계층에서 처리해야 합니까?

저는 두 가지 방법을 모두 시도했습니다.Rest Controller는 Response Entity를 반환하기에 적합한 장소라고 생각합니다.왜냐하면 우리는 RestController에서 매핑을 사용하고 있기 때문입니다.

반면 컨트롤러에는 논리가 포함되지 않아야 합니다.

@GetMapping("/{id}")
public ResponseEntity<Employee> getEmployee(@PathVariable Long id) {
    return ResponseEntity.ok(employeeService.findEmployeeById(id);
}

또는

@GetMapping("/{id}")
public ResponseEntity<Employee> getEmployee(@PathVariable Long id) {
    return employeeService.findEmployeeById(id);
}

컨트롤러예외 처리에 대한 조언도 저의 또 다른 관심사입니다.어떤 방법을 사용하는 것이 가장 좋습니까?

당신의 진전에 감사드립니다.

코드 규약에 따르면 컨트롤러에 논리가 없습니다.

사실 그렇지 않아요.코드 규약에 따르면 각 계층은 자신이 담당하는 논리를 수행해야 합니다.
결과를 계산하고 요청에 의해 요청/필요한 데이터를 검색하는 것은 분명히 나머지 컨트롤러 작업이 아니라 http 응답을 보내는 것입니다.ResponseEntity그것은 그것의 일입니다.그래서 이것은 올바른 방법으로 보입니다.

@GetMapping("/{id}")
public ResponseEntity<Employee> getEmployee(@PathVariable Long id) {
    return ResponseEntity.ok(employeeService.findEmployeeById(id);
}

만약에ResponseEntity당신의 서비스에 의해 생성되었고, 당신의 서비스는 Http 계층과 결합될 것입니다.바람직하지 않으며 서비스로서의 재사용이 줄어듭니다.

상태 코드, 응답 본문, 헤더는 REST의 핵심 부품 중 하나입니다.

컨트롤러는 요청을 수락하고, 요청을 처리하기 위해 올바른 도메인 서비스를 요청하며, 응답을 올바른 위치로 전달하는 것과 관련이 있어야 합니다.

여기서 컨트롤러가 모든 비즈니스 로직을 수행해서는 안 되지만 HTTP 응답 전송은 서비스가 아닌 컨트롤러에서 수행해야 합니다.

상태 코드는 다음을 사용하여 전송할 수 있습니다.@ResponseStatus(HttpStatus.XXX)상황에 따라 상태 코드를 보내야 하는 시나리오에서는 도움이 되지 않을 수 있습니다.사용자 지정 응답 D를 생성할 수 있습니다.일반적으로 본문, 메시지 및 상태 코드를 가진 TO.

public ResponseEntity<ResponseDTO> method() {
    return new ResponseEntity<ResponseDTO>(response,response.getStatus()); 
}

첫째, 비즈니스 로직은 저장소를 통해 데이터 액세스를 추상화할 수 있는 서비스 계층에서 처리해야 합니다.이것은 모듈식 프로그래밍, 서로 분리된 재사용 가능한 코드 조각을 지원합니다.이것이 기본 설계인 모델, 뷰, 컨트롤러(MVC)에 대한 아이디어입니다.테스트 측면에서, 애플리케이션의 이러한 부분들이 서로 독립적으로 작업 및 테스트의 역할을 수행하도록 하는 것이 더 쉬워질 것입니다.서비스 방법에서 논리를 추상화하면 컨트롤러가 제공하는 URL이 아닌 특정 방법에 대한 보안 액세스를 처리할 때도 도움이 됩니다.따라서 Rest Controller는 서비스 계층에 전화를 걸어 적절한 응답을 반환해야 합니다.

두 번째. (휴식) 컨트롤러 조언을 위해 예외 처리기를 사용하면 사용자 지정 오류를 반환하는 데 도움이 됩니다.다음은 예외 처리기 클래스 내부의 예입니다.

     @ExceptionHandler(CustomerExistException.class)
         public final ResponseEntity<ApiErrorResponse> handleCustomerExistException(
            CustomerExistException ex) {


         ApiErrorResponse errorResponse = new ApiErrorResponse("USR_04", "The email     already exists."
            + "Email", String.valueOf(HttpStatus.BAD_REQUEST));

             return new ResponseEntity<ApiErrorResponse>(errorResponse, HttpStatus.BAD_REQUEST);
}`

언급URL : https://stackoverflow.com/questions/57284058/what-is-the-best-practice-for-restcontroller

반응형