

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration des points de terminaison clients
<a name="config-endpoint"></a>

Lorsqu'il AWS SDK pour Kotlin appelle an Service AWS, l'une de ses premières étapes consiste à déterminer où acheminer la demande. Ce processus est connu sous le nom de résolution des terminaux.

Vous pouvez configurer la résolution des points de terminaison pour le SDK lorsque vous créez un client de service. La configuration par défaut pour la résolution des points de terminaison est généralement correcte, mais plusieurs raisons peuvent vous amener à modifier la configuration par défaut. Voici deux exemples de raisons :
+ Envoyez des demandes à une version préliminaire d'un service ou à un déploiement local d'un service.
+ Accès à des fonctionnalités de service spécifiques non encore modélisées dans le SDK.

**Avertissement**  
La résolution des points de terminaison est une rubrique avancée du SDK. Si vous modifiez les paramètres par défaut, vous risquez de casser votre code. Les paramètres par défaut doivent s'appliquer à la plupart des utilisateurs dans les environnements de production.

## Configuration personnalisée
<a name="config-endpoint-custom-config"></a>

Vous pouvez personnaliser la résolution des points de terminaison d'un client de service à l'aide de deux propriétés disponibles lorsque vous créez le client :

1. `endpointUrl: Url`

1. `endpointProvider: EndpointProvider`

### Définir `endpointUrl`
<a name="config-endpoint-custom-config-endpointurl"></a>

Vous pouvez définir une valeur pour `endpointUrl` pour indiquer un nom d'hôte « de base » pour le service. Cette valeur n'est toutefois pas définitive puisqu'elle est transmise en tant que paramètre à l'`EndpointProvider`instance du client. L'`EndpointProvider`implémentation peut ensuite inspecter et éventuellement modifier cette valeur pour déterminer le point final. 

Par exemple, si vous spécifiez une `endpointUrl` valeur pour un client Amazon Simple Storage Service (Amazon S3) et que vous effectuez `GetObject` une opération, l'implémentation du fournisseur de point de terminaison par défaut injecte le nom du compartiment dans la valeur du nom d'hôte.

Dans la pratique, les utilisateurs définissent une `endpointUrl` valeur qui pointe vers une instance de développement ou de prévisualisation d'un service.

### Définir `endpointProvider`
<a name="config-endpoint-custom-config-endpointprovider"></a>

La `EndpointProvider` mise en œuvre d'un client de service détermine la résolution finale du point final. L'`EndpointProvider`interface illustrée dans le bloc de code suivant expose la `resolveEndpoint` méthode.

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

Un client de service appelle la `resolveEndpoint` méthode pour chaque demande. Le client du service utilise la `Endpoint` valeur renvoyée par le fournisseur sans autre modification.

#### Propriétés de `EndpointProvider`
<a name="config-endpoint-custom-config-endpointprovider-params"></a>

La `resolveEndpoint` méthode accepte un `EndpointParameters` objet spécifique au service qui contient les propriétés utilisées dans la résolution des points de terminaison.

Chaque service inclut les propriétés de base suivantes.


****  

| Nom | Type | Description | 
| --- | --- | --- | 
| region | String | La AWS région du client | 
| endpoint | String | Une représentation sous forme de chaîne de l'ensemble de valeurs de endpointUrl | 
| useFips | Booléen | Si les points de terminaison FIPS sont activés dans la configuration du client | 
| useDualStack | Booléen | Si les points de terminaison à double pile sont activés dans la configuration du client | 

Les services peuvent spécifier des propriétés supplémentaires requises pour la résolution. Par exemple, 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)inclut le nom du compartiment ainsi que plusieurs paramètres de fonctionnalités spécifiques à Amazon S3. Par exemple, la `forcePathStyle` propriété détermine si l'adressage d'hôte virtuel peut être utilisé. 

Si vous implémentez votre propre fournisseur, vous ne devriez pas avoir à créer votre propre instance de`EndpointParameters`. Le SDK fournit les propriétés de chaque demande et les transmet à votre implémentation de`resolveEndpoint`.

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

Il est important de comprendre que les deux instructions suivantes NE produisent PAS pour les clients un comportement de résolution de point de terminaison équivalent :

```
// 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")
    }
}
```

L'instruction qui définit la `endpointUrl` propriété spécifie une URL de *base* transmise au fournisseur (par défaut), qui peut être modifiée dans le cadre de la résolution du point de terminaison. 

L'instruction qui définit le `endpointProvider` spécifie l'URL *finale* qu'il `S3Client` utilise.

Bien que vous puissiez définir les deux propriétés, dans la plupart des cas nécessitant une personnalisation, vous fournissez l'une d'entre elles. En tant qu'utilisateur général du SDK, vous fournissez le plus souvent une `endpointUrl` valeur.

### Remarque à propos d'Amazon S3
<a name="config-endpoint-custom-config-s3"></a>

Amazon S3 est un service complexe dont bon nombre de fonctionnalités sont modélisées par le biais de personnalisations personnalisées des points de terminaison, telles que l'hébergement virtuel de compartiments. L'hébergement virtuel est une fonctionnalité d'Amazon S3 dans laquelle le nom du compartiment est inséré dans le nom d'hôte.

C'est pourquoi nous vous recommandons de ne pas remplacer l'`EndpointProvider`implémentation dans un client de service Amazon S3. Si vous devez étendre son comportement de résolution, par exemple en envoyant des requêtes à une pile de développement locale en tenant compte des points de terminaison supplémentaires, nous vous recommandons d'encapsuler l'implémentation par défaut. L'`endpointProvider`exemple suivant montre un exemple de mise en œuvre de cette approche.

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

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

L'extrait de code suivant montre comment le point de terminaison du service général peut être remplacé pour un client Amazon S3.

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

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

L'extrait de code suivant montre comment fournir un fournisseur de point de terminaison personnalisé qui intègre l'implémentation par défaut pour 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` et `endpointProvider`
<a name="config-endpoint-examples-both"></a>

L'exemple de programme suivant illustre l'interaction entre les `endpointProvider` paramètres `endpointUrl` et. Il s'agit d'un cas d'utilisation avancé.

```
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) 
        // ...
    }
}
```