2016-09-05 2 views
1

JAX-RS API를 작성 중이며 Response 클래스를 각 메소드의 리턴 유형으로 사용하고 있습니다. 그러나 필자는 매개 변수의 유효성을 검사하는 "최상의"방법을 찾아 내려고 노력하고 있습니다.JAX-RS 메소드의 입력 매개 변수 유효성 확인

이전에 일부 REST API를 작성했으며 일반적으로 메소드에 사용자 정의 유효성 검사 루틴이 있고 유효성 검사 메시지가있는 사용자 정의 반환 객체가 있습니다. 나는 여기서도 같은 것을하고 싶다고 생각하고 있지만, "선호하는"것인가?

@NotNull 등의 주석이 있으며 사용자 지정 유효성 검사 메시지를 적용하고 제공 할 수 있다는 것을 알고 있지만 실제로는 끝까지 보는 방법이 마음에 들지 않습니다.

그래서, 내가 한 것은 JAX-RS 응답의 .entity()로 사용하고있는 반환 객체 bean을 작성했고 거기에 모든 유효성 검증 메시지를 넣고있다. 성공과 실패에 대해 동일한 반환 개체를 사용하지만 시나리오에 따라 매개 변수를 채우는 것은 단지 문제 일뿐입니다. 이것은 내부 API이므로 외부 사용자는 없습니다. 나는 반환 유형을 표준화하여 항상 동일한 "객체"를 반환하기를 원했습니다.

좋은 방법 같습니까? 저는 REST API 베스트 프랙티스에 조금 녹슬었고 저는 미친 듯이 인터넷 검색을 해왔지만 실제로 모범 사례 결론에 도달하지는 않았습니다.

+1

빈 검증과'@ NotNull '과 같은 특수 효과의 문제점은 무엇입니까? –

+1

글쎄, 난 성공하거나 실패에 관계없이 API 호출에서 반환되는 일관된 개체를 정말로 싶습니다. 어노테이션을 사용하면 반환 객체를 만들지 않아서 그런 일이 발생하지 않습니다. – cloudwalker

답변

1

RestAPI의 입력 유효성 검사는 간단하지 않습니다. 많은 인터넷 자원이 있지만 아무도 이것을하는 우아한 방법을 다루지는 않습니다.

jax-rs 라이브러리의 여러 구현에 대한 주석을 사용하여 간단한 입력 검증을 수행 할 수 있습니다. 이 주석은 정규식이 지원 될 때 정교 할 수 있습니다. @NotNull, @size 등보다 많은 유효성 검사 사례를 다루는 데 도움이됩니다. 이 주석은 또한 사용자에게 반환해야하는 메시지를 사용자 정의하는 데 도움이되는 메시지를 입력으로 허용합니다.

이러한 주석은 섹시하지 않을 수 있습니다 (특히 정규식이 관련되어있을 때). 하지만 여전히 내 자신의 유효성 검사기를 작성하는 것보다 그것을 선호합니다. 매개 변수 A는 값 X가있는 경우, 매개 변수 B : 당신이 (더 많은 논리와 같은) 제약 조건의 유효성을 검사 할 때

조금 까다 롭습니다 검증의 또 다른 관심사는

는이 요구 사항을 예를 들어 말씀입니다 비어 있지 않아야합니다. 그렇지 않으면 매개 변수 B를 비워 두는 것이 좋습니다. 이것은 보통 javax.validation.constraints.*을 사용하여 처리 할 수있는 것이 아닙니다. 나는 이것을 처리 할 수있는 좋은 도서관을 찾지 못했습니다.

는 라이브러리 차단이 API를 호출 할 때마다 호출 될 사용자 정의 유효성 검사 논리를 작성할 수

javax.validation.ConstraintViolation 

를보십시오.

+0

Gotcha, 예, 이해가됩니다. 내게 가장 큰 관심사는 실패가 있는지 또는 모든 것이 성공적으로 완료되었는지에 관계없이 반환 객체가 항상 동일한 구조를 유지하기를 원한다는 것입니다. 이전에 SOAP 서비스가 더 많이 작동 했으므로 여기에서이 작업을 수행하려고합니다.그렇게하는 것이 REST API에 대해 "옳은"일이라는 것을 모릅니다. 그러나 당신이 말했듯이 매우 우아한 방식으로 보이지는 않습니다. – cloudwalker

+0

REST API 사용자가 특정 미디어 유형 (예 : JSON 또는 XML) 인 경우 은 출력을 구문 분석하고 페이로드를 사용하는 사용자에게만 제공됩니다. 예를 들어 메시지가 성공 메시지 또는 실패 메시지라는 표시기를 가질 수 있습니다. 은 사용자가 다른 종류의 구조를 파싱 할 것으로 기대한다는 것을 기반으로합니다. 이것은 논쟁의 여지가 있지만 개인적으로 두 모델 (성공과 실패)을 한 번에 채워진 모델 중 하나만 사용하도록 혼합하는 대신 오히려 깨끗하고 별도로 유지하려고합니다. – LeTex

+0

그리고 ... 당신이 말했듯이 공통 엔트리 포인트가 사용자에게 주어질 수 있습니다.이 엔트리 포인트는 특정 엔티티가있는'Response'를 응답하고 엔티티는 성공 또는 실패 모델 일 수 있습니다. – LeTex