Customize your Scala client
This is documentation for v1 of the Scala API clients, which is not the latest version. To see the documentation for the latest version, see Scala v2.
To change individual requests made with an API client, pass individual Request options. To change all requests, create a custom configuration. This lets you change timeouts, add HTTP headers, and so on.
Add HTTP headers to every request
Adding HTTP headers to your requests lets you set parameters such as a user identifier or an IP address. This can be useful for analytics, geographical search, or applying API key rate limits.
1
2
3
4
5
6
7
val client = new AlgoliaClient(
"YourApplicationID",
"YourWriteAPIKey",
customHeader = Map(
"NAME-OF-HEADER" -> "value-of-header"
)
)
You can add these headers to your requests:
Header | Use case |
---|---|
X-Algolia-UserToken |
Use API key rate limits |
X-Algolia-UserToken |
The Analytics API uses the value of this header to distinguish between users. It takes priority over any value in X-Forwarded-For . Use the X-Algolia-UserToken header to forward the user’s identity without relying on IP addresses. |
X-Forwarded-For |
Use for analytics in backend implementations. If your server sends the user’s IP address with every search, analytics can distinguish between users. Otherwise, the analytics uses the server’s IP address and considers all your users as a single user. |
X-Forwarded-For |
Use for geolocation, when you perform searches from your backend. This ensures that the geolocation for a search uses your user’s IP address and not that of your server. |
1
2
3
4
5
6
7
client.execute {
search into "indexName" query Query(
query = Some("query string")
) options RequestOptions(
extraHeaders = Some(Map("X-Algolia-UserToken" -> "user123"))
)
}
Make sure to use the same user token for your events (Insights API) and search requests (Search API).
- If you send the
authenticatedUserToken
with your events, send the same value with your search requests. - If you send the
userToken
with your events, send the same value with your search requests.
Change timeouts for all requests
Network connections and DNS resolution can be slow. That’s why the API clients come with default timeouts.
1
2
3
4
5
6
7
8
val configuration = AlgoliaClientConfiguration(
httpConnectTimeoutMs = 2 * 1000, // connection timeout in milliseconds
httpReadTimeoutMs = 2 * 1000, // read timeout in milliseconds
httpRequestTimeoutMs = 2 * 1000, // write timeout in milliseconds
dnsTimeoutMs = 2 * 100, // DNS connection timeout in milliseconds
hostDownTimeoutMs = 5 * 60 * 1000 // delay before retrying a host we know was down, in milliseconds
)
new AlgoliaClient(applicationId, apiKey, configuration = configuration)
Don’t change the default timeouts without a good reason.