教學課程:在 Android (Kotlin) 應用程式中呼叫受保護的 Web API
這是教學課程系列中的第四個教學課程,引導您使用 Microsoft Entra 外部 ID 來呼叫受保護的 Web API。
在本教學課程中,您將會:
- 呼叫受保護的 Web API
必要條件
公開至少一個範圍 (委派權限) 和一個應用程式角色 (應用程式權限) 的 API 註冊,例如 ToDoList.Read。 若尚未這麼做,請遵循在範例 Android 行動應用程式中呼叫 API 的指示,以擁有受功能保護的 ASP.NET Core web API。 請務必完成下列步驟:
- 註冊 Web API 應用程式
- 設定 API 範圍
- 設定應用程式角色
- 設定選擇性宣告
- 複製或下載範例 Web API
- 設定和執行範例 Web API
呼叫 API
若要從 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
。若要處理存取 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 應該會自動包含匯入陳述式。