Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Запрос, который успешно завершается, но не содержит полезного результата, легко обработать неправильно, потому что на уровне HTTP он не выглядит как сбой, в нём просто нет ответа, на который вы рассчитывали.
Поиск прямого геокодирования по чему-то слишком расплывчатому или полностью вымышленному возвращает статус 200 с пустым массивом результатов, а не код ошибки.
GET /v1/forward?q=xyzzy nonexistent place&limit=1{
"status": "ok",
"query": "xyzzy nonexistent place",
"results": []
}Поиск по IP-адресу из нераспределённого или частного диапазона возвращает found: false, а не ошибку, вместе со всеми полями, которые всё же удаётся заполнить.
{
"status": "ok",
"ip": "10.0.0.5",
"version": 4,
"found": false
}Проверяйте пустой массив результатов или found: false в отдельной ветке кода, отдельно и от успешного пути, и от обработки ошибок для ответов 4xx и 5xx. Осознанно решите, что происходит дальше: попросить пользователя уточнить ввод, перейти к более широкому поиску с большим limit или показать понятное сообщение «местоположение не найдено» вместо пустого места или вводящего в заблуждение значения по умолчанию.
Действительно несуществующее место лишь одна из причин: плохо отформатированная входная строка, опечатка или запрос, в котором неожиданно смешались языки или системы письма, тоже могут дать пустой результат для адреса, который на самом деле существует. Прежде чем решить, что самого места не существует, подумайте, не поможет ли нормализация ввода или попытка с заданным параметром countries.
Отслеживайте, как часто ваша интеграция попадает в ветку пустого результата, отдельно от доли ошибок. Растущая доля пустых результатов часто указывает на проблему с качеством данных выше по цепочке, в том, как собираются или форматируются адреса, а не на какую-то неисправность самого поиска.
Пустой результат всё равно стоит одного запроса, как и успешное совпадение, поскольку поиск в любом случае был выполнен. Отдельного льготного тарифа для поиска, вернувшегося пустым, нет.
Если относиться к пустому результату как к отдельному осознанному исходу, а не как к дополнению, наспех прикрученному к обработке ошибок, интеграция становится заметно надёжнее. На странице об ошибках описаны настоящие ответы с ошибками, а пустые результаты задокументированы рядом с обычной структурой ответа каждого эндпоинта, например в документации по прямому геокодированию.