

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configura gli endpoint del client
<a name="config-endpoint"></a>

Quando si AWS SDK per Kotlin chiama un Servizio AWS, uno dei primi passi consiste nel determinare dove indirizzare la richiesta. Questo processo è noto come risoluzione degli endpoint.

Puoi configurare la risoluzione degli endpoint per l'SDK quando crei un client di servizio. La configurazione predefinita per la risoluzione degli endpoint in genere va bene, ma ci sono diversi motivi che potrebbero indurti a modificare la configurazione predefinita. Due esempi di motivi sono i seguenti:
+ Invia richieste a una versione non definitiva di un servizio o a una distribuzione locale di un servizio.
+ Accesso a funzionalità di servizio specifiche non ancora modellate nell'SDK.

**avvertimento**  
La risoluzione degli endpoint è un argomento SDK avanzato. Se modifichi le impostazioni predefinite, rischi di violare il codice. Le impostazioni predefinite dovrebbero essere applicate alla maggior parte degli utenti negli ambienti di produzione.

## Configurazione personalizzata
<a name="config-endpoint-custom-config"></a>

È possibile personalizzare la risoluzione degli endpoint di un client di servizio con due proprietà disponibili al momento della creazione del client:

1. `endpointUrl: Url`

1. `endpointProvider: EndpointProvider`

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

È possibile impostare un valore `endpointUrl` per indicare un nome host «base» per il servizio. Questo valore, tuttavia, non è definitivo poiché viene passato come parametro all'`EndpointProvider`istanza del client. L'`EndpointProvider`implementazione può quindi ispezionare e potenzialmente modificare quel valore per determinare l'endpoint finale. 

Ad esempio, se specifichi un `endpointUrl` valore per un client Amazon Simple Storage Service (Amazon S3) ed esegui `GetObject` un'operazione, l'implementazione predefinita del provider di endpoint inserisce il nome del bucket nel valore del nome host.

In pratica, gli utenti impostano un `endpointUrl` valore per indicare un'istanza di sviluppo o di anteprima di un servizio.

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

L'`EndpointProvider`implementazione di un client di servizio determina la risoluzione finale dell'endpoint. L'`EndpointProvider`interfaccia mostrata nel seguente blocco di codice espone il `resolveEndpoint` metodo.

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

Un client di servizio chiama il `resolveEndpoint` metodo per ogni richiesta. Il client del servizio utilizza il `Endpoint` valore restituito dal provider senza ulteriori modifiche.

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

Il `resolveEndpoint` metodo accetta un `EndpointParameters` oggetto specifico del servizio che contiene le proprietà utilizzate nella risoluzione degli endpoint.

Ogni servizio include le seguenti proprietà di base.


****  

| Nome | Tipo | Description | 
| --- | --- | --- | 
| region | Stringa | La AWS regione del cliente | 
| endpoint | Stringa | Una rappresentazione in formato stringa del set di valori di endpointUrl | 
| useFips | Booleano | Se gli endpoint FIPS sono abilitati nella configurazione del client | 
| useDualStack | Booleano | Se gli endpoint dual-stack sono abilitati nella configurazione del client | 

I servizi possono specificare proprietà aggiuntive necessarie per la risoluzione. Ad esempio, 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)include il nome del bucket e anche diverse impostazioni delle funzionalità di Amazon S3-specific . Ad esempio, la `forcePathStyle` proprietà determina se è possibile utilizzare l'indirizzamento dell'host virtuale. 

Se implementi il tuo provider, non dovresti aver bisogno di creare la tua istanza di`EndpointParameters`. L'SDK fornisce le proprietà per ogni richiesta e le trasmette all'implementazione di. `resolveEndpoint`

### `EndpointURL o EndpointProvider`
<a name="config-endpoint-custom-config-which"></a>

È importante comprendere che le due istruzioni seguenti NON producono client con un comportamento di risoluzione degli endpoint equivalente:

```
// 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'istruzione che imposta la `endpointUrl` proprietà specifica un URL di *base* che viene passato al provider (predefinito), che può essere modificato come parte della risoluzione degli endpoint. 

L'istruzione che imposta il `endpointProvider` specifica l'URL *finale utilizzato*. `S3Client`

Sebbene sia possibile impostare entrambe le proprietà, nella maggior parte dei casi che richiedono una personalizzazione, ne viene fornita una. In qualità di utente SDK generico, molto spesso fornite un `endpointUrl` valore.

### Una nota su Amazon S3
<a name="config-endpoint-custom-config-s3"></a>

Amazon S3 è un servizio complesso con molte delle sue funzionalità modellate attraverso personalizzazioni personalizzate degli endpoint, come l'hosting virtuale di bucket. L'hosting virtuale è una funzionalità di Amazon S3 in cui il nome del bucket viene inserito nel nome host.

Per questo motivo, ti consigliamo di non sostituire l'`EndpointProvider`implementazione in un client di servizio Amazon S3. Se hai bisogno di estenderne il comportamento di risoluzione, magari inviando richieste a uno stack di sviluppo locale con considerazioni aggiuntive sugli endpoint, ti consigliamo di completare l'implementazione predefinita. L'`endpointProvider`esempio seguente mostra un esempio di implementazione di questo approccio.

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

### `Esempio EndPointUrl`
<a name="config-endpoint-examples-endpointurl"></a>

Il seguente frammento di codice mostra come sovrascrivere l'endpoint del servizio generale per un client Amazon S3.

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

### `Esempio di EndpointProvider`
<a name="config-endpoint-examples-endpointprovider"></a>

Il seguente frammento di codice mostra come fornire un provider di endpoint personalizzato che includa l'implementazione predefinita per 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 ed EndpointProvider`
<a name="config-endpoint-examples-both"></a>

Il seguente programma di esempio illustra l'interazione tra le impostazioni e. `endpointUrl` `endpointProvider` Si tratta di un caso d'uso avanzato.

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