Share via


Zelfstudie: Een beveiligde web-API aanroepen in de Android-app (Kotlin)

Dit is de vierde zelfstudie in de reeks zelfstudies die u helpt bij het aanroepen van een beveiligde web-API met behulp van Microsoft Entra Externe ID.

In deze zelfstudie gaat u:

  • Een beveiligde web-API aanroepen

Vereisten

Een API aanroepen

  1. Als u een web-API wilt aanroepen vanuit een Android-toepassing voor toegang tot externe gegevens of services, begint u met het maken van een secundair object in uw MainActivity klasse. Het bijbehorende object moet de volgende code bevatten:

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

    Het bijbehorende object definieert twee privéconstanten: WEB_API_BASE_URLwaarbij ontwikkelaars de URL van hun web-API instellen en scopes, waar ontwikkelaars de respectieve scopes web-API toevoegen.

  2. Gebruik de volgende code om het proces van toegang tot een web-API af te handelen:

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

    De code start een coroutine in de hoofd-dispatcher. Het begint met het wissen van het tekstlogboek. Vervolgens wordt gecontroleerd of de basis-URL van de web-API leeg is; als dat het het volgende is, wordt er een pop-upbericht weergegeven en wordt het resultaat geretourneerd. Vervolgens wordt er een GET-aanvraag naar de web-API uitgevoerd met behulp van het opgegeven toegangstoken in een achtergrondthread.

    Nadat het API-antwoord is ontvangen, wordt het tekstlogboek bijgewerkt met de antwoordinhoud. Als er tijdens dit proces een uitzondering optreedt, wordt de uitzondering vastgelegd en wordt het tekstlogboek bijgewerkt met het bijbehorende foutbericht.

    In de code, waarin we onze callback opgeven, gebruiken we een functie die wordt aangeroepen performGetApiRequest(). De functie moet de volgende code hebben:

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

    De code vereenvoudigt het indienen van GET aanvragen bij een web-API. De belangrijkste methode is performGetApiRequest(), waarbij de basis-URL van de web-API en een toegangstoken als parameters worden gebruikt. In deze methode wordt een volledige URL samengesteld door deze toe te /api/todolist voegen aan de basis-URL. Vervolgens wordt er een HTTP-aanvraag gebouwd met de juiste headers, inclusief de autorisatieheader met het toegangstoken.

    Ten slotte wordt de aanvraag synchroon uitgevoerd met behulp van de methode OkHttp newCall() en wordt het antwoord geretourneerd. Het ApiClient object onderhoudt een exemplaar van het verwerken van OkHttpClient HTTP-aanvragen. Als u wilt gebruiken OkHttpClient, moet u de afhankelijkheid implementation 'com.squareup.okhttp3:okhttp:4.9.0' toevoegen aan uw Android Gradle-bestand.

    Zorg ervoor dat u de importinstructies opneemt. Android Studio moet automatisch de importinstructies voor u bevatten.