共用方式為


教學課程:在 Android (Kotlin) 應用程式中呼叫受保護的 Web API

這是教學課程系列中的第四個教學課程,引導您使用 Microsoft Entra 外部 ID 來呼叫受保護的 Web API。

在本教學課程中,您將會:

  • 呼叫受保護的 Web API

必要條件

呼叫 API

  1. 若要從 Android 應用程式呼叫 Web API 以存取外部資料或服務,請從在 MainActivity 類別中建立隨附物件開始。 隨附物件應該包含下列程式碼:

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

    隨附物件會定義兩個私人常數:WEB_API_BASE_URL,其中開發人員會設定其 Web API 的 URL;以及 scopes,其中開發人員會附加其 Web API 各自的 scopes

  2. 若要處理存取 Web API 的程式,請使用下列程式碼:

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

    程式碼會在主要發送器中啟動協同程式。 它會從清除文字記錄檔開始進行。 然後會檢查 Web API 基底 URL 是否空白;如果是空白,則會顯示快顯通知訊息並傳回。 接下來,它會使用背景執行緒中提供的存取權杖,對 Web API 執行 GET 要求。

    收到 API 回應之後,會使用回應內容來更新文字記錄檔。 如果此程式期間發生任何例外狀況,則會記錄例外狀況,並以對應的錯誤訊息更新文字記錄檔。

    在程式碼中,我們在其中指定回撥,使用稱為 performGetApiRequest() 的函式。 函式應該具有下列程式碼:

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

    程式碼有助於向 Web API 提出 GET 要求。 主要方法是 performGetApiRequest(),其會採用 Web API 基底 URL 和存取權杖做為參數。 在此方法中,它會藉由將 /api/todolist 附加至基底 URL 來建構完整的 URL。 然後,會使用適當的標頭建置 HTTP 要求,包括具有存取權杖的授權標頭。

    最後,會使用 OkHttp 的 newCall() 方法來同步執行要求並傳回回應。 ApiClient 物件會維護 OkHttpClient 的執行個體來處理 HTTP 要求。 若要使用 OkHttpClient,您需要將相依性 implementation 'com.squareup.okhttp3:okhttp:4.9.0' 新增至 Android Gradle 檔案。

    請確定您包含 import 陳述式。 Android Studio 應該會自動包含匯入陳述式。