Tutorial: llamada a una API web protegida en la aplicación Android (Kotlin)
Este es el cuarto tutorial de la serie de tutoriales que le guiará en la llamada a una API web protegida utilizando Id. externa de Microsoft Entra.
En este tutorial, hará lo siguiente:
- Llamada a una API web protegida
Requisitos previos
Tutorial: inicio de sesión de usuarios en la aplicación móvil Android (Kotlin)
Un registro de API que expone al menos un ámbito (permisos delegados) y un rol de aplicación (permiso de aplicación), como ToDoList.Read. Si aún no lo ha hecho, siga las instrucciones para llamar a una API en una aplicación móvil Android de ejemplo para tener una API web de ASP.NET Core protegida funcional. Asegúrese de completar los pasos siguientes:
- Registro de una aplicación de API web
- Configuración de ámbitos de API
- Configuración de roles de aplicación
- Configuración de notificaciones opcionales
- Clonación o descarga de la API web de ejemplo
- Configuración y ejecución de la API web de ejemplo
Llamada a una API
Para llamar a una API web desde una aplicación Android para acceder a datos o servicios externos, empiece por crear un objeto complementario en la clase
MainActivity
. El objeto complementario debe incluir el siguiente código:companion object { private const val WEB_API_BASE_URL = "" // Developers should set the respective URL of their web API here private const val scopes = "" // Developers should append the respective scopes of their web API. }
El objeto complementario define dos constantes privadas:
WEB_API_BASE_URL
, donde los desarrolladores establecen la dirección URL de la API web yscopes
, donde los desarrolladores anexan lasscopes
respectivas de su API web.Para controlar el proceso de acceso a una API web, use el siguiente código:
private fun accessWebApi() { CoroutineScope(Dispatchers.Main).launch { binding.txtLog.text = "" try { if (WEB_API_BASE_URL.isBlank()) { Toast.makeText(this@MainActivity, getString(R.string.message_web_base_url), Toast.LENGTH_LONG).show() return@launch } val apiResponse = withContext(Dispatchers.IO) { ApiClient.performGetApiRequest(WEB_API_BASE_URL, accessToken) } binding.txtLog.text = getString(R.string.log_web_api_response) + apiResponse.toString() } catch (exception: Exception) { Log.d(TAG, "Exception while accessing web API: $exception") binding.txtLog.text = getString(R.string.exception_web_api) + exception } } }
El código inicia una corrutina en el distribuidor principal. Se empieza por borrar el registro de texto. A continuación, comprueba si la URL base de la API web está vacía; si es así, muestra un mensaje de notificación y regresa. A continuación, realiza una solicitud GET a la API web mediante el token de acceso proporcionado en un subproceso en segundo plano.
Después de recibir la respuesta de la API, actualiza el registro de texto con el contenido de la respuesta. Si se produce alguna excepción durante este proceso, registra la excepción y actualiza el registro de texto con el mensaje de error correspondiente.
En el código, donde especificamos nuestra devolución de llamada, usamos una función denominada
performGetApiRequest()
. La función debe tener el siguiente código:object ApiClient { private val client = OkHttpClient() fun performGetApiRequest(WEB_API_BASE_URL: String, accessToken: String?): Response { val fullUrl = "$WEB_API_BASE_URL/api/todolist" val requestBuilder = Request.Builder() .url(fullUrl) .addHeader("Authorization", "Bearer $accessToken") .get() val request = requestBuilder.build() client.newCall(request).execute().use { response -> return response } } }
El código facilita la realización de solicitudes
GET
a una API web. El método principal esperformGetApiRequest()
, que toma la dirección URL base de la API web y un token de acceso como parámetros. Dentro de este método, crea una dirección URL completa anexando/api/todolist
a la dirección URL base. A continuación, compila una solicitud HTTP con los encabezados adecuados, incluido el encabezado de autorización con el token de acceso.Por último, ejecuta la solicitud de forma sincrónica mediante el método
newCall()
de OkHttp y devuelve la respuesta. El objetoApiClient
mantiene una instancia deOkHttpClient
para controlar las solicitudes HTTP. Para usarOkHttpClient
, debe agregar la dependenciaimplementation 'com.squareup.okhttp3:okhttp:4.9.0'
al archivo Gradle de Android.Asegúrese de incluir las instrucciones import. Android Studio debe incluir automáticamente las instrucciones import.
Contenido relacionado
- Inicio de sesión de usuarios y llamada a una API web protegida en la aplicación Android (Kotlin) de muestra
- Inicio de sesión de usuarios en una aplicación móvil de Android (Kotlin) de muestra mediante la autenticación nativa
- Tutorial: preparar la aplicación móvil Android para la autenticación nativa