Я пытаюсь геокодировать адреса с помощью ЗДЕСЬ API. Я не свободный план. Я пытаюсь следующий код (Spring Boot в Kotlin):
override fun geocode(address: Address): Coordinate? {
val uriString = UriComponentsBuilder
.fromHttpUrl(endpoint)
.queryParam("app_id", appId)
.queryParam("app_code", appCode)
.queryParam("searchtext", addressToSearchText(address))
.toUriString()
logger.info("Geocode requested with url {}", uriString)
val response = restTemplate.getForEntity(uriString, String::class.java)
return response.body?.let {
Klaxon().parse<GeocodeResponse>(it)
}?.let {
it.Response.View.firstOrNull()?.Result?.firstOrNull()
}?.let {
Coordinate(
latitude = it.Location.DisplayPosition.Latitude,
longitude = it.Location.DisplayPosition.Longitude
)
}.also {
if (it == null) {
logger.warn("Geocode failed: {}", response.body)
}
}
}
Оказалось, что когда я вызываю этот метод много раз подряд, некоторые запросы возвращают пустые ответы, например:
{
"Response":{
"MetaInfo":{
"Timestamp":"2019-04-18T11:33:17.756+0000"
},
"View":[
]
}
}
Я не мог понять ни одного правила, почему некоторые запросы не выполняются. Кажется, это просто случайно.
Однако, когда я пытаюсь вызвать те же URL-адреса с curl
в моем браузере, все работает просто отлично.
Полагаю, что количество запросов в секунду ограничено, но я не смог найти ничего в ЗДЕСЬ документации.
Кто-нибудь имеет представление о пределе? Или это может быть что-то еще?