2014-11-08 7 views
0

내 서비스 계층에 다음 메소드가 있습니다.REST API에서 리소스의 잘못된 ID를 처리하는 방법은 무엇입니까?

public void delete(int candidateId) { 
    candidateRepository.delete(candidateId); 
} 

이제는이 방법이 RESTful 아키텍처가 적용된 웹 레이어에서 사용됩니다. 이 방법을 트리거 할 URL은 :

DELETE /candidates/{id} 

어떻게 서비스 계층에서 REST API를 사용하는 클라이언트에 의해 주어진 잘못된 식별자를 처리해야합니까? 나는 HTTP 응답이 4xx가 될 것이라고 알고 있지만 ID와 서비스와 웹 레이어 사이에 무효라는 것을 어떻게 전달해야합니까?

내 응용 프로그램을 복구 할 수없는 조건이므로 확인되지 않은 예외를 사용해야합니까? 오류 장벽 (Spring 예외 처리기)이이를 처리합니다.

또는 클라이언트가 잘못된 ID를 제공 할 수 있으므로 확인 된 예외 여야합니까? 그것은 클라이언트가 잘못된 ID를 제공하는 것이 가능하다면 그 문제

답변

0

, 그들은 잘못 ID를 줄 것이다 경우

나는 최신 스프링 기술을 사용하고 있습니다. 그리고 이것은 응용 프로그램이 복구 할 수 있어야하는 조건입니다.

이에 대해 확인 된 예외가 반환됩니다. 그러나 확인 된 예외를 도입하면 애플리케이션의 여러 레이어에서 변경 될 수 있습니다. 예를 들어 많은 메소드의 서명을 변경하여 "throws"절 (OCP 위반)을 추가해야하기 때문입니다. 로버트 C. 마틴 (Robert C. Martin)의 "클린 코드 (Clean Code)"와 같이 일부 사람들이 지나치게 복잡해지면 체크되지 않은 예외를 사용하는 것이 좋습니다. 예외가 의미있는 설명이있는 한 반환 할 것은 귀하에게 달려 있다고 말합니다.

0

먼저 REST API가 예외를 처리하는 방법을 결정해야합니다. 여러 개의 유효한이 solutions이 똑같이 유효합니다.

API를 디자인 할 때 문제가 될 수있는 것이 무엇이든 잘못되었다고 가정해야합니다. 클라이언트 응용 프로그램은 잘못된 매개 변수를 전달하거나 잘못된 형식을 사용합니다. 응용 프로그램에서이를 예상하고 정상적으로 처리해야합니다.

비즈니스 로직을 전달하기 위해 예외를 사용하는 것이 특별히 읽을 수있는 것은 아니며 성능에 영향을 미칠 수 있습니다. 아주 단순한 경우를 넘어서 실제로는 확장되지 않습니다. "삭제"에 대한 비즈니스 로직에 "레코드를 찾을 수 없습니다", "레코드에 종속 관계가 있습니다", "레코드가 보호되었습니다", "레코드가 보관 됨"등의 오류가 포함될 수 있습니다.

대신 응용 프로그램이 명시적인 상태 정보를 앞뒤로 전달하도록 디자인하고이를 사용하는 RESTful 오류 처리로 변환하십시오.

+0

앞뒤로 전달할 상태 정보의 예를 들려 줄 수 있습니까? – LuckyLuke

+0

이유의 목록을 취하는 생성자가있는'DeletionFailedException (checked)'이있는 경우 그렇게 나쁘지 않을 수 있습니다. 예외는 메소드의 대체 리턴을 전달하는 방법입니다. – LuckyLuke

+0

체크 된 예외를 방금 읽었습니까? 하나님 께서 우리 모두를 도우 신다. – Vaelyr

관련 문제