Compartir vía


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

Llamada a una API

  1. 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 y scopes, donde los desarrolladores anexan las scopes respectivas de su API web.

  2. 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 es performGetApiRequest(), 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 objeto ApiClient mantiene una instancia de OkHttpClient para controlar las solicitudes HTTP. Para usar OkHttpClient, debe agregar la dependencia implementation '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.