Руководства

Запасной вариант, когда запрос не возвращает результата

Запрос, который успешно завершается, но не содержит полезного результата, легко обработать неправильно, потому что на уровне 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.

Отдельное логирование пустых результатов

Отслеживайте, как часто ваша интеграция попадает в ветку пустого результата, отдельно от доли ошибок. Растущая доля пустых результатов часто указывает на проблему с качеством данных выше по цепочке, в том, как собираются или форматируются адреса, а не на какую-то неисправность самого поиска.

Стоимость запроса без результата

Пустой результат всё равно стоит одного запроса, как и успешное совпадение, поскольку поиск в любом случае был выполнен. Отдельного льготного тарифа для поиска, вернувшегося пустым, нет.

Если относиться к пустому результату как к отдельному осознанному исходу, а не как к дополнению, наспех прикрученному к обработке ошибок, интеграция становится заметно надёжнее. На странице об ошибках описаны настоящие ответы с ошибками, а пустые результаты задокументированы рядом с обычной структурой ответа каждого эндпоинта, например в документации по прямому геокодированию.