Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Блок «Возможно, вы имели в виду» работает лучше всего, когда он появляется ненавязчиво, предлагает короткий список и не мешает, если ни одна из подсказок не подходит. Эндпоинт автодополнения создан именно для такого сценария.
GET /v1/autocomplete?q=Baker Stret&limit=4{
"status": "ok",
"query": "Baker Stret",
"suggestions": [
{"text": "Baker Street, London, UK", "place_id": "abc123"},
{"text": "Baker Street, York, UK", "place_id": "abc789"}
]
}Обратите внимание, что опечатка вроде «Stret» в запросе не мешает получить разумные подсказки, поскольку эндпоинт рассчитан на работу с неидеальным вводом, а в этом и состоит весь смысл блока подсказок.
Не каждый запрос, с опечаткой или без, даёт полезное совпадение.
GET /v1/autocomplete?q=Zzqxlm Nonexistent Rd&limit=4{
"status": "ok",
"query": "Zzqxlm Nonexistent Rd",
"suggestions": []
}Пустой массив suggestions здесь является корректным ответом, а не признаком того, что с запросом что-то пошло не так. Сделайте так, чтобы в этом случае блок тихо исчезал, а не показывал пустой выпадающий список или заметное сообщение об ошибке для ввода, у которого просто нет хорошего совпадения.
Показывайте поле text каждой подсказки в качестве видимой подписи и сохраняйте place_id выбранной подсказки, поскольку именно этот идентификатор вы затем передаёте дальше, чтобы получить полный адрес, а не разбираете заново отображаемый текст.
Самое важное в этом подходе, особенно на сайте, где взаимодействием не управляет клиентский JavaScript, в том, что поле по-прежнему принимает введённый вручную адрес при отправке формы, независимо от того, была ли выбрана подсказка. Блок подсказок, который блокирует отправку, пока не выбран один из вариантов, превращает полезную подсказку в жёсткое требование, и любой адрес, которого по вполне законным причинам нет в списке подсказок, становится невозможно отправить.
Адреса, написанные не той письменностью, на которой в основном тестировался ваш блок подсказок, или транслитерированные названия мест реально присутствуют в большинстве баз адресов и заслуживают такой же обработки с переходом на обычный текст, как и любой другой запрос без совпадений. Не считайте отсутствие подсказок для необычного ввода признаком того, что сам ввод неверен, поскольку правильная реакция часто состоит в том, чтобы просто позволить клиенту отправить именно то, что он ввёл.
Установите для limit небольшое значение: для блока подсказок обычно достаточно от трёх до пяти, поскольку более длинный список лишает смысла быстрый визуальный просмотр. Используйте задержку вызовов (debounce), чтобы запрос отправлялся только после короткой паузы в наборе, и общее количество запросов за сессию оставалось низким.
Типичное поле адреса может запускать несколько вызовов автодополнения на посетителя, пока он вводит текст и исправляет себя, и каждый из них равен одному запросу. Это небольшая доля из 2 500 бесплатных запросов в день, входящих в каждый ключ или доступных с одного адреса без ключа, даже для формы с заметным трафиком.
Хорошо сделанный блок подсказок тихо исправляет опечатки и отходит в сторону, если не узнаёт ввод. Полное описание полей приведено в документации по автодополнению адресов.