Tutorial: Chamar uma API da Web protegida no aplicativo Android (Kotlin)
Este é o quarto tutorial da série de tutoriais que o orienta a chamar uma API da Web protegida usando a ID Externa do Microsoft Entra.
Neste tutorial, você:
- Chamar uma API da Web protegida
Pré-requisitos
Tutorial: Iniciar sessão de utilizadores na aplicação móvel Android (Kotlin)
Um registro de API que expõe pelo menos um escopo (permissões delegadas) e uma função de aplicativo (permissão de aplicativo), como ToDoList.Read. Se ainda não o fez, siga as instruções para chamar uma API em um aplicativo móvel Android de exemplo para ter uma API da Web ASP.NET Core protegida funcionalmente. Certifique-se de concluir as seguintes etapas:
- Registrar um aplicativo de API da Web
- Configurar escopos de API
- Configurar funções do aplicativo
- Configurar afirmações opcionais
- Clonar ou baixar exemplo de API da Web
- Configurar e executar API Web de exemplo
Chamar uma API
Para chamar uma API da Web de um aplicativo Android para acessar dados ou serviços externos, comece criando um objeto complementar em sua
MainActivity
classe. O objeto complementar deve incluir o seguinte 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. }
O objeto complementar define duas constantes privadas:
WEB_API_BASE_URL
, onde os desenvolvedores definem a URL de sua API da Web escopes
, onde os desenvolvedores acrescentam a respetivascopes
de sua API da Web.Para manipular o processo de acesso a uma API da Web, use o seguinte 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 } } }
O código lança uma co-rotina no despachante principal. Começa por limpar o registo de texto. Em seguida, ele verifica se a URL base da API da Web está em branco; Em caso afirmativo, ele exibe uma mensagem do sistema e retorna. Em seguida, ele executa uma solicitação GET para a API da Web usando o token de acesso fornecido em um thread em segundo plano.
Depois de receber a resposta da API, ele atualiza o log de texto com o conteúdo da resposta. Se ocorrer alguma exceção durante esse processo, ele registra a exceção e atualiza o log de texto com a mensagem de erro correspondente.
No código, onde especificamos nosso retorno de chamada, usamos uma função chamada
performGetApiRequest()
. A função deve ter o seguinte 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 } } }
O código facilita a realização
GET
de solicitações para uma API da Web. O método principal éperformGetApiRequest()
, que usa a URL base da API da Web e um token de acesso como parâmetros. Dentro desse método, ele constrói uma URL completa anexando/api/todolist
à URL base. Em seguida, ele cria uma solicitação HTTP com os cabeçalhos apropriados, incluindo o cabeçalho de autorização com o token de acesso.Finalmente, ele executa a solicitação de forma síncrona usando o método do Okhttp
newCall()
e retorna a resposta. OApiClient
objeto mantém uma instância deOkHttpClient
para manipular solicitações HTTP. Para usarOkHttpClient
o , você precisa adicionar a dependênciaimplementation 'com.squareup.okhttp3:okhttp:4.9.0'
ao seu arquivo Android Gradle.Certifique-se de incluir as instruções de importação. O Android Studio deve incluir as instruções de importação para você automaticamente.