Rutas dinámicas en la adaptación

Estoy intentando acceder a un recurso con como http://192.168.1.64:5050/api/{api_key}/updater.info .

¿Cómo establecería dinámicamente el parámetro api_key ? He intentado usar un RequestInterceptor sin éxito donde la url de base es http://192.168.1.64:5050/api/{api_key} .

 @Override public void intercept(RequestFacade request) { request.addPathParam("api_key", apiKey); } 

¿Hay otras alternativas?

El reemplazo de ruta no ocurre dentro de la URL base del punto final de la API, solo la cadena URL relativa en el método. Voy a suponer que no desea prefijar las URL relativas en cada una de sus declaraciones de método de interfaz.

Aunque está mal redactado, el javadoc de Endpoint dice:

Los llamantes siempre deben consultar la instancia de los valores más recientes en lugar de almacenar en caché los valores devueltos.

Esto significa que para cada solicitud se consultará la instancia de Endpoint para el valor de la URL de base.

Puede proporcionar una implementación personalizada de Endpoint en la que puede cambiar el valor de la clave API:

 public final class FooEndpoint implements Endpoint { private static final String BASE = "http://192.168.1.64:5050/api/"; private String url; public void setApiKey(String apiKey) { url = BASE + apiKey; } @Override public String getName() { return "default"; } @Override public String getUrl() { if (url == null) throw new IllegalStateException("API key not set."); return url; } } 

Utilizar esta:

 @PUT("/path1/path2/{userId}") void getSomething( @Path("userId") String userId ); 

Y se llama al método como este:

 String userId = "1234"; service.getSomething(userId); 

Si el parámetro path no está en la misma posición en la url de cada solicitud, por ejemplo, http://endpoint/blah/{apiKey} y http://endpoint/blah/blah/{apiKey}/blah , podría Haz lo siguiente.

En su interfaz APIService

  @GET(/blah/{apiKey}) void getFoo(Callback<Object> callback); @GET(/blah/blah/{apiKey}/blah) void getFooBlah(Callback<Object> callback); 

A continuación, en su clase ApiClient crear un RequestInterceptor

 private static APIService sAuthorizedApiService; private static Gson gson; static { gson = new GsonBuilder().setPrettyPrinting() .create(); } public static synchronized APIService getApiClient(final Context context) { if (sAuthorizedApiService == null) { RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addPathParam("apiKey", DataProvider.getInstance(context).getApiKey(); } }; RestAdapter restAdapter = new RestAdapter.Builder().setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(new OkHttpClient())) .setEndpoint("http://endpoint") .setRequestInterceptor(requestInterceptor) .setConverter(new GsonConverter(gson)) .build(); sAuthorizedApiService = restAdapter.create(GMAuthorizedApiService.class); } return sAuthorizedApiService; } 
  • Prueba de respuestas reales de red con retroadaptación
  • Añadir Retrofit Requestinterceptor con Dagger en tiempo de ejecución
  • Establecer Retrofit RestAdapter.LogLevel a algo que no sea FULL produce un cuerpo de respuesta vacía
  • RedDit oAuth 2 para Android aplicación "sin usuario" con Retrofit
  • Convertidor de gson retrofit para json anidado con diferentes objetos
  • RxJava reintentoCuando vuelve a suscribir la propagación
  • Retrofit / Rxjava y servicios basados ​​en sesiones
  • Obtención de información de encabezado con RXJava y Retrofit
  • ¿Es posible mostrar la barra de progreso cuando se descarga a través de Retrofit 2 Asynchronous?
  • RoboSpice lanzando excepciones okhttp
  • Retrofit, devolución de llamada para 204 No respuesta de contenido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.