Condividi tramite


Esercitazione: Chiamare un'API Web protetta in un'app Android (Kotlin)

Questa è la quarta esercitazione della serie che illustra come chiamare un'API Web protetta usando Microsoft Entra per ID esterno.

In questa esercitazione si apprenderà come:

  • Chiamare un'API Web protetta

Prerequisiti

Chiamare un'API

  1. Per chiamare un'API Web da un'applicazione Android per accedere a dati o servizi esterni, iniziare creando un oggetto complementare nella classe MainActivity. L'oggetto complementare deve includere il codice seguente:

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

    L'oggetto complementare definisce due costanti private: WEB_API_BASE_URL, dove gli sviluppatori impostano l'URL dell'API Web e scopes, dove gli sviluppatori aggiungono i rispettivi scopes delle API Web.

  2. Per gestire la procedura di accesso a un'API Web, usare il codice seguente:

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

    Il codice avvia una coroutine nel dispatcher principale. Inizia cancellando il registro di testo. Verifica quindi se l'URL di base dell'API Web è vuoto; in tal caso, visualizza un messaggio di tipo avviso popup e ritorna. Esegue quindi una richiesta GET all'API Web usando il token di accesso fornito in un thread in background.

    Dopo aver ricevuto la risposta dell'API, aggiorna il registro di testo con il contenuto della risposta. Se si verifica un'eccezione durante questo processo, registra l'eccezione e aggiorna il registro di testo con il messaggio di errore corrispondente.

    Nel codice, dove si specifica il callback, si usa una funzione denominata performGetApiRequest(). La funzione deve avere il codice seguente:

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

    Il codice facilita l'esecuzione di richieste GET a un'API Web. Il metodo principale è performGetApiRequest(), che accetta l'URL di base dell'API Web e un token di accesso come parametri. All'interno di questo metodo viene creato un URL completo aggiungendo /api/todolist all'URL di base. Compila quindi una richiesta HTTP con le intestazioni appropriate, compresa l'intestazione dell'autorizzazione con il token di accesso.

    Infine, esegue la richiesta in modo sincrono usando il metodo newCall() di OkHttp e restituisce la risposta. L'oggetto ApiClient mantiene un'istanza di OkHttpClient per gestire le richieste HTTP. Per usare OkHttpClient, è necessario aggiungere la dipendenza implementation 'com.squareup.okhttp3:okhttp:4.9.0' al file Android Gradle.

    Assicurarsi di includere le istruzioni per l’importazione. Android Studio deve includere automaticamente le istruzioni per l’importazione.