2016-10-25 11 views
2

에 학생 관계형 테이블에 설정에 서로 다른 필터를 지원하기 위해 사용되는 [student_id, 표준, home_city, home_state, 국가를 num_of_subjects] 이제디자인 패턴은 내가</p> <p>스키마와 SQL 테이블이 자바

, 이 테이블 위에 api 엔드 포인트를 지원하고자합니다 :

GET /students?home_state=?&country=?&home_city=?&standard=? 

모든 필터는 선택 사항입니다.

이제이 요구 사항에 맞는 좋은 코드 디자인을 알고 싶습니다. 기술을 위해 웹 애플리케이션 용 자바와 런타임 쿼리 생성 용 라이브러리 인 querydsl을 사용하고 있습니다.

몇 가지 아이디어가 떠돌 았지만 사례를 처리 할 수있는 구체적이고 확장 가능한 접근 방식을 찾고 있습니다. 따라서 새로운 필터 열이 추가되면 (예 : fav_subject) 최소 코드 변경이 필요합니다. 아이디어를 위해, 나는이 방법

public interface Filter { 
    // If apiCallParameters contains this filter key, add filter to addToList 
    void addFilter(Map<String, String> apiCallParameters, List<QueryFilters> addToList); 
} 

와 필터 인터페이스를 생각하고

가능한 모든 필터는이 인터페이스를 구현하는 클래스 각 될 것입니다. 이제 쿼리 생성 클래스는 List<Filter>을 가질 수 있으며 각 필터는 addFilter를 사용하여이 필터를 추가할지 여부를 결정합니다.

코드 디자인에서이 겉으로보기에 매우 일반적인 경우를 어떻게 처리해야하는지 더 잘 알고 싶습니다.

답변

-1

설명하는 API는 REST 인터페이스에 매핑됩니다. 이런 종류의 인터페이스를 찾고 있다면 다음 줄을 따라 쓸 수 있습니다 :

import org.springframework.stereotype.Service; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Context; 
import com.wordnik.swagger.annotations.Api; 
import com.wordnik.swagger.annotations.ApiParam; 

@Service 
@Path("/students") 
public class StudentResource { 

    @GET 
    @Produces({MediaType.APPLICATION_JSON}) 
    public JSONObject getStudent(@Context UriInfo uriInfo, 
           @ApiParam(required = false) @PathParam("home_state")String homeState, 
           @ApiParam(required = false) @PathParam("home_city")String homeCity, 
           @ApiParam(required = false) @PathParam("country")String country, 
           @ApiParam(required = false) @PathParam("standard")String standard) 
    { 

     // Do what you will with these strings which may be empty. 
     JSONObject obj = new JSONObject; 

     return obj; 
    } 
} 
+0

이것은 내가 작성한 API 끝점 일 뿐이므로이 끝점과 데이터베이스 계층 사이의 이야기에 관심이 있습니다. – greperror