Compartilhar via


Tutorial: Chamar uma API Web protegida no aplicativo Android (Kotlin)

Este é o quarto tutorial da série de tutoriais que orienta você sobre como chamar uma API Web protegida usando a ID externa do Microsoft Entra.

Neste tutorial, você aprenderá a:

  • Chamar uma API Web protegida

Pré-requisitos

  • Tutorial: Conectar usuários no aplicativo 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. Caso você ainda não tenha feito isso, siga as instruções para chamar uma API em um aplicativo móvel Android de exemplo para ter uma API Web do ASP.NET Core funcional e protegida. Certifique-se de concluir as seguintes etapas:

    • Registrar um aplicativo da API Web
    • Configurar escopos de API
    • Configurar funções de aplicativo
    • Configurar declarações opcionais
    • Clonar ou fazer download da API Web de exemplo
    • Configurar e executar a API Web de exemplo

Chamar uma API

  1. Para chamar uma API Web de um aplicativo Android para acessar dados ou serviços externos, comece criando um objeto complementar na sua classe MainActivity. 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, em que os desenvolvedores definem a URL da API Web, e scopes, em que os desenvolvedores acrescentam os respectivos scopes da API Web.

  2. Para lidar com o processo de acesso a uma API 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 inicia uma corrotina no dispatcher principal. Ele começa limpando o log de texto. Em seguida, verifica se a URL base da API 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 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 registrará a exceção e atualizará o log de texto com a mensagem de erro correspondente.

    No código em que 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 de solicitações GET a uma API da Web. O método principal é performGetApiRequest(), que usa a URL base da API Web e um token de acesso como parâmetros. Dentro desse método, ele constrói uma URL completa acrescentando /api/todolist à URL base. Depois, ele cria uma solicitação HTTP com os cabeçalhos apropriados, incluindo o cabeçalho de autorização com o token de acesso.

    Por fim, ele executa a solicitação de forma síncrona usando o método newCall() do OkHttp e retorna a resposta. O objeto ApiClient mantém uma instância de OkHttpClient para lidar com solicitações HTTP. Para usar OkHttpClient, é necessário adicionar a dependência implementation 'com.squareup.okhttp3:okhttp:4.9.0' ao arquivo Gradle do Android.

    Certifique-se de incluir as instruções de importação. O Android Studio deve incluir as instruções de importação para você automaticamente.