アプリコードをAPIに接続する
このガイドでは、Amplify ライブラリを使用してアプリケーションコードをバックエンド API に接続します。開始する前に、以下が必要です:
- クラウドサンドボックスと Amplify Data リソースが実行中(
npx ampx sandbox) - Amplify ライブラリがインストールされたフロントエンドアプリケーション
- npm がインストール済み
Amplify ライブラリを設定する
バックエンド(npx ampx sandbox)を繰り返し実行すると、amplify_outputs.json ファイルが生成されます。このファイルには API のエンドポイント情報と認証設定が含まれています。以下のコードをアプリのエントリーポイントに追加して、Amplify クライアントライブラリを初期化および設定します:
認可モードを設定する
認可モードは、リクエストをバックエンドでどのように認可するかを決定します。デフォルトでは、Amplify Data は「userPool」認可を使用して、署名されたユーザー認証情報で API リクエストに署名します。データモデルに allow.publicApiKey() 認可ルールを使用している場合は、認可モードとして「apiKey」を使用する必要があります。認可ルールをカスタマイズを確認して、どのタイプのリクエストでどの認可モードを選択するかについて詳しく学んでください。デフォルト認可モードは、デプロイメント成功時に生成される amplify_outputs.json の一部として提供されます。
リクエストレベルで認可モードを設定する
各個別 API リクエストで認可モードを指定することもできます。これは、アプリケーションが通常は 1 つの認可モードを使用し、少数の例外がある場合に便利です。
val query = ModelQuery.list(Todo::class.java) as AppSyncGraphQLRequest<PaginatedResult<Todo>>val apiKeyQuery = query .newBuilder() .authorizationType(AuthorizationType.API_KEY) .build<PaginatedResult<Todo>>()Amplify.API.query(apiKeyQuery, { Log.i("MyAmplifyApp", "Queried with API key ${it.data}")}, { Log.e("MyAmplifyApp", "Error querying with API Key")})val query = ModelQuery.list(Todo::class.java) as AppSyncGraphQLRequest<PaginatedResult<Todo>>val userPoolQuery = query .newBuilder() .authorizationType(AuthorizationType.AMAZON_COGNITO_USER_POOLS) .build<PaginatedResult<Todo>>()Amplify.API.query(userPoolQuery, { Log.i("MyAmplifyApp", "Queried with Cognito user pool ${it.data}")}, { Log.e("MyAmplifyApp", "Error querying with Cognito user pool")})val query = ModelQuery.list(Todo::class.java) as AppSyncGraphQLRequest<PaginatedResult<Todo>>val iamQuery = query .newBuilder() .authorizationType(AuthorizationType.AWS_IAM) .build<PaginatedResult<Todo>>()Amplify.API.query(iamQuery, { Log.i("MyAmplifyApp", "Queried with AWS IAM ${it.data}")}, { Log.e("MyAmplifyApp", "Error querying with AWS IAM")})val query = ModelQuery.list(Todo::class.java) as AppSyncGraphQLRequest<PaginatedResult<Todo>>val oidcQuery = query .newBuilder() .authorizationType(AuthorizationType.OPENID_CONNECT) .build<PaginatedResult<Todo>>()Amplify.API.query(oidcQuery, { Log.i("MyAmplifyApp", "Queried with OIDC authorization mode ${it.data}")}, { Log.e("MyAmplifyApp", "Error querying with OIDC authorization mode")})カスタムリクエストヘッダーを設定する
Amplify Data エンドポイントを使用する場合、認可目的またはフロントエンドからバックエンド API へのメタデータを渡すためにリクエストヘッダーを設定する必要があるかもしれません。
独自のヘッダーを指定するには、AWSApiPlugin のビルダーで configureClient() 設定オプションを使用します。amplify_outputs.json で設定されているいずれかの API の名前を指定します。以下のようにラムダ式を提供することで、基礎となる OkHttp インスタンスにカスタマイズを適用します。
AWSApiPlugin plugin = AWSApiPlugin.builder() .configureClient(AWSApiPlugin.DEFAULT_GRAPHQL_API, okHttpBuilder -> { okHttpBuilder.addInterceptor(chain -> { Request originalRequest = chain.request(); Request updatedRequest = originalRequest.newBuilder() .addHeader("customHeader", "someValue") .build(); return chain.proceed(updatedRequest); }); }) .build();Amplify.addPlugin(plugin);val plugin = AWSApiPlugin.builder() .configureClient(AWSApiPlugin.DEFAULT_GRAPHQL_API) { okHttpBuilder -> okHttpBuilder.addInterceptor { chain -> val originalRequest = chain.request() val updatedRequest = originalRequest.newBuilder() .addHeader("customHeader", "someValue") .build() chain.proceed(updatedRequest) } } .build()Amplify.addPlugin(plugin)val plugin = AWSApiPlugin.builder() .configureClient(AWSApiPlugin.DEFAULT_GRAPHQL_API) { okHttpBuilder -> okHttpBuilder.addInterceptor { chain -> val originalRequest = chain.request() val updatedRequest = originalRequest.newBuilder() .addHeader("customHeader", "someValue") .build() chain.proceed(updatedRequest) } } .build()Amplify.addPlugin(plugin)AWSApiPlugin plugin = AWSApiPlugin.builder() .configureClient(AWSApiPlugin.DEFAULT_GRAPHQL_API, okHttpBuilder -> { okHttpBuilder.addInterceptor(chain -> { Request originalRequest = chain.request(); Request updatedRequest = originalRequest.newBuilder() .addHeader("customHeader", "someValue") .build(); return chain.proceed(updatedRequest); }); }) .build();RxAmplify.addPlugin(plugin);