Partilhar via


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

  1. 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 e scopes, onde os desenvolvedores acrescentam a respetiva scopes de sua API da Web.

  2. 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. O ApiClient objeto mantém uma instância de OkHttpClient para manipular solicitações HTTP. Para usar OkHttpCliento , você precisa adicionar a dependência implementation '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.