Pencegat HTTP - AWS SDK for Kotlin

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pencegat HTTP

Anda dapat menggunakan pencegat untuk menghubungkan eksekusi permintaan dan tanggapan API. Pencegat adalah mekanisme terbuka di mana SDK memanggil kode yang Anda tulis untuk menyuntikkan perilaku ke dalam siklus hidup permintaan/respons. Dengan cara ini, Anda dapat mengubah permintaan dalam penerbangan, proses permintaan debug, pengecualian tampilan, dan banyak lagi.

Contoh berikut menunjukkan pencegat sederhana yang menambahkan header tambahan ke semua permintaan keluar sebelum loop coba lagi dimasukkan.

class AddHeader( private val key: String, private val value: String ) : HttpInterceptor { override suspend fun modifyBeforeRetryLoop(context: ProtocolRequestInterceptorContext<Any, HttpRequest>): HttpRequest { val httpReqBuilder = context.protocolRequest.toBuilder() httpReqBuilder.headers[key] = value return httpReqBuilder.build() } }

Untuk informasi selengkapnya dan kait intersepsi yang tersedia, lihat Interceptor Interceptor.

Pendaftaran pencegat

Anda mendaftarkan pencegat ketika Anda membangun klien layanan atau ketika Anda mengganti konfigurasi untuk serangkaian operasi tertentu.

Interceptor untuk semua operasi klien layanan

Kode berikut menambahkan AddHeader instance ke properti pencegat pembangun. Penambahan ini menambahkan x-foo-version header ke semua operasi sebelum loop coba lagi dimasukkan.

val s3 = S3Client.fromEnvironment { interceptors += AddHeader("x-foo-version", "1.0") } // All service operations invoked using 's3' will have the header appended. s3.listBuckets { ... } s3.listObjectsV2 { ... }

Pencegat hanya untuk operasi tertentu

Dengan menggunakan withConfig ekstensi, Anda dapat mengganti konfigurasi klien layanan untuk satu atau beberapa operasi untuk klien layanan apa pun. Dengan kemampuan ini, Anda dapat mendaftarkan pencegat tambahan untuk subset operasi.

Contoh berikut mengesampingkan konfigurasi s3 instance untuk operasi dalam ekstensi. use Operasi yang dipanggil s3Scoped berisi header x-foo-version dan x-bar-version header.

// 's3' instance created in the previous code snippet. s3.withConfig { interceptors += AddHeader("x-bar-version", "3.7") }.use { s3Scoped -> // All service operations invoked using 's3Scoped' trigger interceptors // that were registered when the client was created and any added in the // withConfig { ... } extension. }