La conexión con servicios externos (API/Rest) es fundamental hoy en día para las aplicaciones. Cada vez más dispostivos tienen acceso a una conexión con internet constante y es por eso que las apps ya cargan y descargan casi la totalidad de los datos que utilizan en servidores externos.
La mayor parte de la carga computacional de las operaciones que se han de realizar (o al menos las más pesadas) recae hoy en día sobre los servidores, alojados a cientos, o a veces miles de kilómetros de nuestros usuarios.
Una de las formas más habituales de interconectar las apps con las bases de datos de las aplicaciones, donde guardamos información de los usuarios y de todo el sistema, es utilizar una API de comunicación de tipo REST.
¿Cómo funciona una API/Rest?
Este sistema permite el acceso externo a unos servicios que son los que se ocupan de interoperar con la base de datos; es decir, actúan como mediadores habilitando ciertas funciones controladas a los operadores externos.
Esta es una forma adecuada de proporcionar seguridad al sistema, ya que las apps ejecutándose en los terminales del usuario no van a poder ejecutar funciones peligrosas, aun cuando el código se vea comprometido y manipulado. Los servicios web solo van a proporcionar ciertas operaciones en el sistema, y es una responsabilidad del backend y del sistema el no habilitar funcionalidades peligrosas.
Servicios Web
Los servicios web van a ser los puntos de conexión donde la intercomunicación entre las apps y el servidor se va a hacer posible. Estos servicios web van a habilitarnos métodos como por ejemplo un login, un cambio de nombre de perfil, o, incluso, obtener listados de productos. El desarrollador de la base de datos y de la API nos tendrá que proporcionar una documentación clara y estándar sobre cuáles son los servicios que hay, qué puntos de acceso tienen (URL) y qué parámetros necesitan. Además, tendremos que tener en cuenta el formato de la salida para poder operar con esos datos en nuestra aplicación.
Normalmente hoy en día los servicios web devuelven la respuesta en formato JSON, por lo que es recomendable saber cómo leerlo y transformar los datos a objetos Java para poder manipularlos como queramos. Si no sabes cómo trabajar con JSON te dejo un enlace al vídeo de walkiria apps: trabajar con JSON en Android Studio.
Volley Android Studio
Volley es una librería que nos va a permitir hacer conexiones con servicios web externos de manera fácil y rápida. También puedes utilizar retrofit, que funciona de manera muy similar. A mí me gusta Volley porque es simple y nunca me ha dado problemas y por eso la sigo utilizando aún hoy en día en todos las aplicaciones que usan una API/Rest.
Para hacer una petición a un servicio con Volley vas a necesitar los siguientes datos:
- Una instancia del context de la aplicación que se está ejecutando.
- La URL del servicio al que vas a llamar.
- El método de conexión con el servicio (GET o POST).
- Parámetros (POST, o GET en la URL).
También deberás tener en cuenta la implementación de los siguientes métodos callback:
- OnResponse: Si todo ha ido bien y la petición ha sido satisfactoria. Recuerda que esto no excluye de errores en la petición por no cumplir los parámetros de la API, simplemente indica que la conexión con el servicio en esa URL se ha realizado.
- OnError: Si no se ha podido conectar con el servicio por algún motivo.
Para hacer una petición Volley, tenemos que añadir un objeto de tipo JSONObjectRequest a la cola de peticiones de volley, tal y como se muestra en el ejemplo:
RequestQueue queue = Volley.newRequestQueue(this);
String url = SERVICE_URL;
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject resp = new JSONObject(response);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(com.android.volley.error.VolleyError error) {
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("PARAM1", PARAM);
return params;
}
@Override
protected Map<String, String> getParams() {
HashMap<String, String> params = new HashMap<String, String>();
return params;
}
};
stringRequest.setShouldCache(false);
queue.add(stringRequest);
En este ejemplo vemos cómo hacer una petición POST usando Volley. Recuerda que tendrás que instalar la librería Volley a través del repositorio añadiendo la siguiente línea al fichero build.gradel de tu proyecto en la sección dependencies.
implementation 'dev.dworks.libs:volleyplus:+'
Hasta aquí todo lo relacionado con Volley y web services. En mi curso de Android en youtube te enseño mucho más, e, incluso, te ofreco el código de una implementación propia que deja el código muy limpio y fácil. ¿Quieres verlo? Mira el vídeo:
Excelente curso muy recomendable!
¡Gracias por tu comentario! Espero que puedas seguir disfrutándolo a medida que lo voy completando. ¡Un saludo, Sebastián!
Amigo yo tengo una duda referente a volley espero puedas ayudarme
¡Hola! Claro, ¿qué problema es? Saludos.
tengouna duda podriad ayudar?
Claro, puedes escribirla aquí directamente. ¡Un saludo!