2012-09-25 2 views
5

Google은 REST 리소스를 제공하는 최대 절전 모드 백엔드가있는 Java 웹 앱을 보유하고 있습니다. 이제 get 요청에서 쿼리 매개 변수에 의해 제어되는 일반 검색을 구현하는 작업에 직면하고 있습니다.HTTP GET 요청 매개 변수에서 검색 SQL 생성

some/rest/resource?name_like=foo&created_on>=2012-09-12&sort_by_asc=something 

또는 이와 유사한

  • 우리는 (> = 같은) 제어 문자를 데리러 요청 문자열을 분석하기 위해 우리는하고 싶지 않아요
  • 가능한 모든 매개 변수 (이름, created_on, 뭔가를) 미리 정의하지 않으려는
  • 도 우리가

을 (문자를 제어 할 수있는 대안 또는 추가 등) _eq _like _goe 등 같은 것들을 반영하기 위해 우리 자신의 문법을 구현하지 않으려는 않습니다가 제공 프레임 워크의 어떤 종류가 있습니까 도와주세요 이 GET 요청 매개 변수에서 데이터베이스 쿼리으로 매핑 하시겠습니까?

우리가 얻고있는 REST 리소스를 알기 때문에 엔티티/테이블 (선택)이 있습니다. 또한 검색 깊이를 제한하기 위해 실행될 JOIN을 미리 정의해야 할 수도 있습니다.

그러나 REST를 사용하는 클라이언트가 특정 매개 변수와 특정 제어 시퀀스가 ​​검색으로 변환되는 방식을 미리 정의하지 않고도 모든 검색을 실행할 수 있기를 원합니다.


는 지금은 Mysemas QueryDSL에 대한 몇 가지 반 자동 솔루션 구축을 시도하고있다. 그것은 내가 열을 정렬하고 열을 미리 정의 할 수있게 해주 며 간단한 문자열 비교를 통해 '_like', '_loe'... 등의 매개 변수를 검색 한 다음 검색의 해당 미리 정의 된 부분을 활성화합니다. SQL 인젝션 증거 유형 저장이라는 점을 제외하면 SQL 문자열과 크게 다르지 않습니다.

그러나 나는 여전히 내 검색 개체에 잠재적으로 쿼리를 처리 할 수 ​​있어야한다고 말합니다. " '???'와 같은 이름을 가진 사람을 찾습니다." 지금 우리는 REST 리소스를 내부적으로 소비하고 실제 검색 생성을 아주 잘 분리하기 때문에 이것은 괜찮습니다. 검색을해야한다면 더 많은 사전 정의를 추가 할 수 있습니다. 그러나 우리는 REST 리소스를 앞으로 언젠가 공개 할 것이므로 그렇게 크지 않을 것입니다.


우리가 궁금해하는 점은이를 해결하기위한 몇 가지 프레임 워크 또는 모범 사례 또는 권장 솔루션이 있어야한다는 것입니다. 우리는 이것을 원하는 사람이 아닙니다. 예를 들어 Redmine은 REST 인터페이스를 통해 모든 리소스를 제공하며 원하는대로 쿼리 할 수 ​​있습니다. 또는 그래프 API가있는 페이스 북. 그 사람들은 모든 가능성을 미리 정의하지 않고 오히려 일반적인 문법을 만들었을 것이라고 확신합니다. 가능한 한 많은 노력을 절약하고 대신 사용 가능한 솔루션을 사용하고 싶습니다.

내가 말했듯이 우리는 Hibernate를 사용하므로 SQL 또는 HQL 솔루션이 좋을 수도 있고 QueryDsl과 같은 엔티티를 기반으로하는 모든 것이 가능할 것입니다. (SQL 인젝션에 관한 보안 문제가 있습니다)

어떤 제안이 있습니까? 아이디어? 우리는 단지 그것을 스스로해야만할까요?

답변

1

.NET 관점에서 내가 생각할 수있는 가장 가까운 것은 WCF 데이터 서비스입니다.

OData 웹 사이트에 지정된 the uri-conventions을 살펴보십시오. 4.5 Filter System Query Option 섹션에 대한 좋은 정보가 있습니다. 이 사이트의 많은 예제가 .NET과 관련되어 있음을 알게 될 것입니다.하지만이 언어를 Java와 함께 사용하려면 othersuggestions이 있습니다.

+0

감사! 그것은 유망한 것으로 들린다. 우리는 이것을 분석하여 REST 리소스를 관리하고 쿼리 기능 만 필요하기 때문에 우리 구조에 맞게 부분을 사용할 수 있는지 확인합니다. 그러나 이것이 가능하다면 소비자의 측면에서 검색 폼에서 이러한 쿼리의 구조에 대한 지능적인 매핑이 필요합니다. – Pete

+0

probs 없음. Java 및/또는 Hibernate를 사용한 이래로 오랜 시간이 걸렸으며 이것이 어떻게 최대 절전 모드와 어떻게 잘 맞는지 모르겠습니다. 필자는 Matt Raible의 [AppFuse] (http://appfuse.org/)에 대한 몇 가지 변경 사항에 대한 블로그에서 [이 게시물] (http://raibledesigns.com/rd/entry/appfuse_news_github_hibernate_search) 만해도 충분히 재미있게 보였습니다. 이 포스트에서 그는 [Hibernate Search] (http://docs.jboss.org/hibernate/search/4.1/reference/en-US/html_single/)에 대해 언급했고, 그것은 당신의 질문을 생각하게했다. 어쩌면 당신도 당신 상황에서 사용할 수 있는지 볼 수 있습니다. –