Domanda

Attualmente sto progettando come gestire il routing in un'API di riposo con versione in cui la versione non fa parte dell'URL, ma inviata tramite una variabile di intestazione.

Ho considerato / visto cose come:

Re-scrittura dell'URL basato sulla variabile di intestazione I.e. La richiesta /orders {X-Media-Type: v1} riscriverà a / v1 / ordini e quindi potremmo avere un @Path("/v1/orders") OrderV1Resource {} e quindi rendere V2 sarebbe banale @Path("/v2/orders") OrderV2Resource {}. (la mia prima preferenza) Come utilizzare un filtro servlet in Java per modificare un servlet in entrata URL di richiesta?

Avere un singolo @Path("/orders") OrderResource {} in cui ognuno dei suoi metodi ha un headerparam iniettato e potrei controllare la variabile di intestazione e quindi decidere quale implementazione dell'API dell'ordine ho voluto utilizzare (che sembra molto disordinato a me)

// 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
   }
}
.

o semplicemente raggruppandoli in barattoli separati e avere un servizio guarda l'intestazione e il percorso verso la versione corretta. (sembra avere senso se l'app cresce per essere veramente grande)

È stato utile?

Soluzione

Ho finito per passare la versione in tramite un'intestazione, quindi è stato utilizzato per instradare la risorsa desiderata tramite un javax.servlet.Filter.

Esempio Accetta intestazione: Accept: application/vnd.datarank.v1+json

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top