

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

# Konfigurasikan titik akhir klien
<a name="config-endpoint"></a>

Saat AWS SDK untuk Kotlin memanggil Layanan AWS, salah satu langkah pertamanya adalah menentukan ke mana harus merutekan permintaan. Proses ini dikenal sebagai resolusi titik akhir.

Anda dapat mengonfigurasi resolusi titik akhir untuk SDK saat membuat klien layanan. Konfigurasi default untuk resolusi titik akhir biasanya baik-baik saja, tetapi ada beberapa alasan yang mungkin mengarahkan Anda untuk memodifikasi konfigurasi default. Dua contoh alasannya adalah sebagai berikut:
+ Membuat permintaan ke versi prarilis layanan atau untuk penyebaran lokal layanan.
+ Akses ke fitur layanan tertentu yang belum dimodelkan dalam SDK.

**Awas**  
Resolusi titik akhir adalah topik SDK lanjutan. Jika Anda mengubah pengaturan default, Anda berisiko melanggar kode Anda. Pengaturan default harus berlaku untuk sebagian besar pengguna di lingkungan produksi.

## Konfigurasi kustom
<a name="config-endpoint-custom-config"></a>

Anda dapat menyesuaikan resolusi titik akhir klien layanan dengan dua properti yang tersedia saat Anda membangun klien:

1. `endpointUrl: Url`

1. `endpointProvider: EndpointProvider`

### Set `endpointUrl`
<a name="config-endpoint-custom-config-endpointurl"></a>

Anda dapat menetapkan nilai `endpointUrl` untuk menunjukkan nama host “dasar” untuk layanan. Nilai ini, bagaimanapun, tidak final karena diteruskan sebagai parameter ke `EndpointProvider` instance klien. `EndpointProvider`Implementasi kemudian dapat memeriksa dan berpotensi memodifikasi nilai tersebut untuk menentukan titik akhir. 

Sebagai contoh, jika Anda menentukan `endpointUrl` nilai untuk klien Amazon Simple Storage Service (Amazon S3) dan menjalankan `GetObject` operasi, implementasi penyedia endpoint default akan menyuntikkan nama bucket ke dalam nilai nama host.

Dalam praktiknya, pengguna menetapkan `endpointUrl` nilai untuk menunjuk pada contoh pengembangan atau pratinjau layanan.

### Set `endpointProvider`
<a name="config-endpoint-custom-config-endpointprovider"></a>

`EndpointProvider`Implementasi klien layanan menentukan resolusi akhir titik akhir. `EndpointProvider`Antarmuka yang ditunjukkan dalam blok kode berikut memperlihatkan `resolveEndpoint` metode.

```
public fun interface EndpointProvider<T> {
    public suspend fun resolveEndpoint(params: T): Endpoint
}
```

Klien layanan memanggil `resolveEndpoint` metode untuk setiap permintaan. Klien layanan menggunakan `Endpoint` nilai yang dikembalikan oleh penyedia tanpa perubahan lebih lanjut.

#### `EndpointProvider`properti
<a name="config-endpoint-custom-config-endpointprovider-params"></a>

`resolveEndpoint`Metode ini menerima `EndpointParameters` objek khusus layanan yang berisi properti yang digunakan dalam resolusi titik akhir.

Setiap layanan mencakup properti dasar berikut.


****  

| Nama | Tipe | Deskripsi | 
| --- | --- | --- | 
| region | String |  AWS Wilayah klien | 
| endpoint | String | Sebuah representasi string dari nilai set endpointUrl | 
| useFips | Boolean | Apakah titik akhir FIPS diaktifkan dalam konfigurasi klien | 
| useDualStack | Boolean | Apakah titik akhir dual-stack diaktifkan dalam konfigurasi klien | 

Layanan dapat menentukan properti tambahan yang diperlukan untuk resolusi. Misalnya, Amazon S3 [https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.endpoints/-s3-endpoint-parameters/index.html](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.endpoints/-s3-endpoint-parameters/index.html)menyertakan nama bucket dan juga beberapa pengaturan fitur khusus Amazon S3. Misalnya, `forcePathStyle` properti menentukan apakah pengalamatan host virtual dapat digunakan. 

Jika Anda menerapkan penyedia Anda sendiri, Anda tidak perlu membuat instance Anda sendiri. `EndpointParameters` SDK menyediakan properti untuk setiap permintaan dan meneruskannya ke implementasi `resolveEndpoint` Anda.

### `endpointUrl` atau `endpointProvider`
<a name="config-endpoint-custom-config-which"></a>

Penting untuk dipahami bahwa dua pernyataan berikut TIDAK menghasilkan klien dengan perilaku resolusi titik akhir yang setara:

```
// Use endpointUrl.
S3Client.fromEnvironment { 
    endpointUrl = Url.parse("https://endpoint.example")
}

// Use endpointProvider.
S3Client.fromEnvironment {
    endpointProvider = object : S3EndpointProvider {
        override suspend fun resolveEndpoint(params: S3EndpointParameters): Endpoint = Endpoint("https://endpoint.example")
    }
}
```

Pernyataan yang menetapkan `endpointUrl` properti menentukan URL *dasar* yang diteruskan ke penyedia (default), yang dapat dimodifikasi sebagai bagian dari resolusi titik akhir. 

Pernyataan yang menetapkan `endpointProvider` menentukan URL *akhir* yang `S3Client` digunakan.

Meskipun Anda dapat mengatur kedua properti, dalam banyak kasus yang memerlukan penyesuaian, Anda menyediakan salah satunya. Sebagai pengguna SDK umum, Anda paling sering memberikan `endpointUrl` nilai.

### Catatan tentang Amazon S3
<a name="config-endpoint-custom-config-s3"></a>

Amazon S3 adalah layanan yang kompleks dengan banyak fitur-fiturnya yang dimodelkan melalui penyesuaian titik akhir yang disesuaikan, seperti hosting virtual bucket. Virtual hosting adalah fitur Amazon S3 di mana nama bucket dimasukkan ke dalam nama host.

Karena itu, kami menyarankan Anda untuk tidak mengganti `EndpointProvider` implementasi di klien layanan Amazon S3. Jika Anda perlu memperluas perilaku resolusinya, mungkin dengan mengirimkan permintaan ke tumpukan pengembangan lokal dengan pertimbangan titik akhir tambahan, kami sarankan untuk membungkus implementasi default. `endpointProvider`Contoh berikut menunjukkan contoh implementasi dari pendekatan ini.

## Contoh
<a name="config-endpoint-examples"></a>

### Contoh `endpointUrl`
<a name="config-endpoint-examples-endpointurl"></a>

Cuplikan kode berikut menunjukkan bagaimana titik akhir layanan umum dapat diganti untuk klien Amazon S3.

```
val client = S3Client.fromEnvironment {
    endpointUrl = Url.parse("https://custom-s3-endpoint.local")
    // EndpointProvider is left as the default.
}
```

### Contoh `endpointProvider`
<a name="config-endpoint-examples-endpointprovider"></a>

Cuplikan kode berikut menunjukkan cara menyediakan penyedia titik akhir kustom yang membungkus implementasi default untuk Amazon S3.

```
import aws.sdk.kotlin.services.s3.endpoints.DefaultS3EndpointProvider
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointParameters
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointProvider
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint

public class CustomS3EndpointProvider : S3EndpointProvider {
    override suspend fun resolveEndpoint(params: S3EndpointParameters) =
        if (/* Input params indicate we must route another endpoint for whatever reason. */) {
            Endpoint(/* ... */)
        } else {
            // Fall back to the default resolution.
            DefaultS3EndpointProvider().resolveEndpoint(params)
        }
}
```

### `endpointUrl` dan `endpointProvider`
<a name="config-endpoint-examples-both"></a>

Contoh program berikut menunjukkan interaksi antara `endpointUrl` dan `endpointProvider` pengaturan. Ini adalah kasus penggunaan lanjutan.

```
import aws.sdk.kotlin.services.s3.S3Client
import aws.sdk.kotlin.services.s3.endpoints.DefaultS3EndpointProvider
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointParameters
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointProvider
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint

fun main() = runBlocking {
    S3Client.fromEnvironment {
        endpointUrl = Url.parse("https://example.endpoint")
        endpointProvider = CustomS3EndpointProvider()
    }.use { s3 ->
        // ...
    }
}

class CustomS3EndpointProvider : S3EndpointProvider {
    override suspend fun resolveEndpoint(params: S3EndpointParameters) {
        // The resolved string value of the endpointUrl set in the client above is available here.
        println(params.endpoint) 
        // ...
    }
}
```