2014-04-11 2 views
2

현재 버전이 URL의 일부가 아니지만 헤더 변수를 통해 전송되는 버전 관리 된 나머지 API에서 라우팅을 처리하는 방법을 설계하고 있습니다.Dropwizard 다중 Rest API 버전

나는 생각했다/같은 볼 것들 :

다시 쓰는 것 (V2)을 따라서/V1/주문에 다시 것입니다 요청 /orders {X-Media-Type: v1} 즉, 헤더 변수에 따라 URL을하고 우리가 @Path("/v1/orders") OrderV1Resource {}을 가질 수 있으며, 보통 @Path("/v2/orders") OrderV2Resource {}. (처음 선호) 그것의 각각의 방법은 주입 HeaderParam을 가지고 있고 헤더 변수를 확인하고 (나에게 매우 지저분한 보인다) 내가 사용하고자하는 주문 API 구현 결정할 수있는 곳 단일 @Path("/orders") OrderResource {}을 갖는 How to use a servlet filter in Java to change an incoming servlet request url?

// pseudo-java code 
@Path("/orders") 
OrderResource { 
    OrderV1Impl v1Impl; 
    OrderV2Impl v2Impl; 
    @GET 
    public List<Order> findAll(@HeaderParam header) { 
     version = header.get("accepts") 
     if(version.equals("v1")) { return v1Impl.findAll() } 
     else if(version.equals("v2")) { return v2Impl.findAll() } 
     return error 
    } 
} 

별도의 JARS에 번들로 제공하고 서비스에서 헤더를보고 올바른 버전으로 라우트하는 것이 좋습니다. (앱이 실제로 커지면 의미가있는 것처럼 보입니다)

+0

이에 대한 논의가있다 :

예 헤더에 동의합니다. 희망이 있으면 https://groups.google.com/forum/#!search/URL$20API$20Versioning$20dropwizard/dropwizard-user/Z8QA7cngzUo/5JTxc7wNt8wJ – Cemo

+0

@cemo 링크를 클릭해도 검색 결과로 이동하지 않을 수 있습니다. .. –

답변

0

헤더를 통해 버전을 전달한 다음 javax.servlet.Filter을 통해 원하는 리소스를 라우팅하는 데 사용했습니다. Accept: application/vnd.datarank.v1+json