Frage

Derzeit entwerfe ich den Umgang mit dem Routing in einer versionierten Rest-API, bei der die Version nicht Teil der URL ist, sondern über eine Header-Variable gesendet wird.

Ich habe über Dinge nachgedacht/gesehen wie:

Schreiben Sie die URL basierend auf der Header-Variable neu, d. h.die Anfrage /orders {X-Media-Type: v1} würde nach /v1/orders umschreiben und dann könnten wir eine haben @Path("/v1/orders") OrderV1Resource {} und daher wäre es trivial, v2 zu erstellen @Path("/v2/orders") OrderV2Resource {}.(meine erste Präferenz) Wie verwende ich einen Servlet-Filter in Java, um die URL einer eingehenden Servlet-Anfrage zu ändern?

Eine Single haben @Path("/orders") OrderResource {} wobei jede ihrer Methoden ein injiziertes HeaderParam hat und ich die Header-Variable überprüfen und dann entscheiden könnte, welche Order-API-Implementierung ich verwenden möchte (was mir sehr chaotisch vorkommt)

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

Oder bündeln Sie sie einfach in separaten JARS und lassen Sie einen Service den Header überprüfen und zur richtigen Version weiterleiten.(scheint sinnvoll zu sein, wenn die App wirklich groß wird)

War es hilfreich?

Lösung

Am Ende habe ich die Version über einen Header übergeben und diesen dann verwendet, um die gewünschte Ressource über einen weiterzuleiten javax.servlet.Filter.

Beispiel für einen Accept-Header:Accept: application/vnd.datarank.v1+json

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top