2016-10-12 3 views
0

모든 계정 데이터 (번호, 이름)를 반환하는 REST 서비스/계정이 있습니다.컬렉션에서 필터링/검색 할 Spring MVC REST API

요구 사항 : 는 "그리고"또는 "또는"오히려 전체 컬렉션을 retruning 이상 조합하여 아래의 검색/필터 패턴을 지원해야한다.

  • startsWith
  • endsWith
  • 포함

질문 1 : API 디자인 올바른 (편안하고) 또는 같은 예를 들면 할 수있는 더 좋은 방법이 아래에이 있습니까 -

/accounts?name^My Account 123**or**number~ACC1234 

(^ "==>로 시작,"~ "==>로 끝남)

/accounts?name^My Account 123**and**number~ACC1234 

봄 컨트롤러 (^ "==>로 시작"~ "==>로 끝나는)

/accounts?name$ACC123 

($ ==> 계정 컬렉션 ACC123를 포함) :

이러한 필터 (매개 변수 쿼리) 패턴을 @RequestParam으로 가져오고 패턴을 구문 분석 한 다음 &을 적용하여 데이터 저장소에서 검색 할 계획입니다. 단점은 새로운 필터 패턴이 Controller 클래스에서 변경해야한다는 것입니다.

질문 2 : 컬렉션에서 검색/필터를 수행하기 위해 Spring 3에서 사용할 수있는 기본 기능이 있습니까?

감사합니다.

+2

참고 자료로 스프링 데이터 solr로 사용할 수있는 apache solr을 사용하지 않는 이유 http://docs.spring.io/spring-data/solr/docs/2.0.4.RELEASE/reference/html/ –

+0

검색어 매개 변수를 사용하지 않는 이유가 있습니까? –

답변

1

디자인 측면에서 쿼리 매개 변수를 사용하여 검색/필터 매개 변수를 지정하는 것이 좋습니다. 그러나 귀하의 경우와 같이 더 복잡한 경우에는 일반적으로 검색만을 다루는 새로운 종점을 정의합니다. 검색에 대한 내 논리가 "나"와 "포함"엄격 경우, 예를 들어

, 나는 같은 책 검색을 정의하는 것입니다 : 여기
GET /books/?author=john&keywords=how%20to%20use%20spring 

, 내 API는 엄격하게 도서를 검색 할 것입니다 저자의 이름에 "john"이 포함되어 있고 "봄 사용 방법"이라는 단어가 내용에 표시됩니다. 검색 논리는 일관성을 유지하고 클라이언트는 유연성이 없습니다. 귀하의 경우에는

클라이언트가 특정 자신의 검색 기준에 능력이있는 경우, 당신은 새로운 엔드 포인트를 구축하기 위해 뭔가해야

POST /books/search 

을 그리고 요청 본문에 자신을 게시 검색 기준 DSL 같음 name^My Account 123**and**number~ACC1234