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
Zelfstudie: Gebruikers aanmelden in de mobiele Android-app (Kotlin)
Een API-registratie die ten minste één bereik (gedelegeerde machtigingen) en één app-rol (toepassingsmachtiging) beschikbaar maakt, zoals ToDoList.Read. Als u dat nog niet hebt gedaan, volgt u de instructies voor het aanroepen van een API in een voorbeeld van een mobiele Android-app om een functionele beveiligde ASP.NET Core-web-API te hebben. Zorg ervoor dat u de volgende stappen uitvoert:
- Een web-API-toepassing registreren
- API-bereiken configureren
- App-rollen configureren
- Optionele claims configureren
- Voorbeeldweb-API klonen of downloaden
- Voorbeeldweb-API configureren en uitvoeren
Een API aanroepen
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_URL
waarbij ontwikkelaars de URL van hun web-API instellen enscopes
, waar ontwikkelaars de respectievescopes
web-API toevoegen.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 isperformGetApiRequest()
, 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. HetApiClient
object onderhoudt een exemplaar van het verwerken vanOkHttpClient
HTTP-aanvragen. Als u wilt gebruikenOkHttpClient
, moet u de afhankelijkheidimplementation '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.