次の方法で共有


チュートリアル: Android (Kotlin) アプリで保護された Web API を呼び出す

これは、Microsoft Entra 外部 ID を使用して保護された Web API を呼び出す方法について説明するチュートリアル シリーズの 4 番目のチュートリアルです。

このチュートリアルでは、次のことについて説明します。

  • 保護された 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.
    }
    

    コンパニオン オブジェクトによって、2 つのプライベート定数 (開発者が Web API の URL を設定する WEB_API_BASE_URL と、開発者が Web API のそれぞれの scopes を追加する 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 要求が容易になります。 main メソッドは performGetApiRequest() であり、Web API のベース URL とアクセス トークンをパラメーターとして受け取ります。 このメソッド内では、ベース URL に /api/todolist を追加することで完全な URL が構築されます。 その後、アクセス トークンを含む承認ヘッダーなど、適切なヘッダーを含む HTTP 要求が構築されます。

    最後に、OkHttp の newCall() メソッドを使用して同期的に要求が実行され、応答が返されます。 ApiClient オブジェクトでは、HTTP 要求を処理するために OkHttpClient のインスタンスが維持されます。 OkHttpClient を使用するには、依存関係 implementation 'com.squareup.okhttp3:okhttp:4.9.0' を Android Gradle ファイルに追加する必要があります。

    必ず import ステートメントを含めます。 Android Studio では、自動的に import ステートメントが含められます。