2013-10-11 3 views
3

우리는 Java SDK를 구축하여 REST API를 제공하는 Google 서비스 중 하나에 대한 액세스를 단순화합니다. 이 SDK는 타사 개발자가 사용합니다.Java 메소드에 REST 요청을위한 매개 변수를 전달하는 방법은 무엇입니까?

문제 중 하나는 각 요청의 선택적 매개 변수를 나타내는 좋은 방법을 찾는 것이 었습니다.

의 우리가 나머지 엔드 포인트 있다고 가정 해 봅시다 : 여러 개의 선택적 매개 변수가 GET /photos : sortBy, pageSize, pageNumber을 등

하나의 솔루션이 있음을 나타내는 API 메서드에 매개 변수로 Map<String,String>을 수용하는 것 휴식 전화.

  • 방법의 서명이 개발자에게이 방법을 사용할 수 선택적 매개 변수의 이름에 대한 정보 (뿐만 아니라 유효한 값)을 제공하지 :

    interface RestService { 
        public List<Photo> getPhotos(Map<String,String> parameters); 
    } 
    

    이 솔루션에 문제가 몇 가지 있습니다. 그는 REST API 문서를 참조해야하며 이상적으로 우리는 이러한 필요성을 피하고자합니다.

  • 개발자는 그가 호출 할 메소드에 대한 매개 변수를 사용하여 여러 Map을 작성하게되며, 모든 곳에서 매개 변수의 이름과 값을 하드 코딩합니다. 즉, 변경된 경우이를 수정하는 번거 로움을 의미합니다.

또 다른 해결책은 선택적 매개 변수에 대한 정보가 들어있는 옵션 개체를 사용하는 것입니다. 이 객체를 생성하기 위해 빌더 패턴을 사용할 수도 있습니다.

interface RestService { 
    public List<Photo> getPhotos(PhotosOptions options); 
} 

개발자는 현재 사용 가능한 선택적 매개 변수가 무엇인지 알고 쉽게 이런 PhotosOptions 구축 할 수 있습니다 : 문제

PhotosOptions options = PhotosOptions.builder().sortBy(DESC).pageSize(200).build(); 
List<Photo> photos = getPhotos(options); 

이 메소드 서명은 다음과 같은 형태가 될 것이다 어떻게 우리가 SDK로 다루려고하는 서비스는 우리가 구현해야하는 엄청난 범위의 요청을 가지고 있으며 거의 ​​모든 요청에는 허용되는 옵션 목록이 다릅니다. 이로 인해 많은 수의 Options 클래스가 생성 될 수 있습니다.

가장 좋은 해결책은 무엇입니까? 각 조합에 대해 Options 객체 (및 빌더)를 빌드 하시겠습니까? 내가 모든 종류의 매개 변수 조합을 가지고 있기 때문에 상속은 여기서 도움이되지 않습니다. 당신이 가리 켰을 때,

+0

이것이 도움이 될만한 것이 아니라면 지금하지 마십시오. 이 https://github.com/spacifici/simple-rest-client 쓴이 인터페이스는 말 그대로 Java 인터페이스를 작성하여 REST 서비스를 사용할 수있는 REST 클라이언트 라이브러리입니다. 언제든지 사용해보십시오. – j0n0

답변

0

더 나은 방법은 사용 옵션 객체입니다

interface RestService { 
    public List<Photo> getPhotos(PhotosOptions options); 
} 

이 매우 어려운 방법이며 문자를 많이 입력해야, 당신은 클래스와 다른 엉덩이 통증을 많이해야합니다.

그러나 강한 방법 서명을 제공하기 때문에이 방법이 다른 방법보다 낫다는 점이 SDK의 결정 성을 더욱 높여줍니다. 클래스를 패키지별로 구분하면 이것이 더 나은 방법이라는 것을 알 수 있습니다.

감사 인사를 전합니다.

나는이 질문을 여러 번 시도한 후에도 같은 질문을 받았다.

+0

나는 또한 그것이 최선의 방법이라고 믿습니다. 그러나 필자는 작성하고 유지해야하는 최종 옵션 클래스 (및 빌더)가 너무 많다는 것에 우려하고 있습니다. 우리는 SDK 사용자의 이익이 추가 작업과 복잡성을 상당하게 (클래스 수를 대폭 늘림으로써) 보상하는지 궁금해하고 있습니다. –

관련 문제