Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Клиент может ввести реальный адрес и реальный почтовый индекс, которые на самом деле не относятся друг к другу, чаще всего из-за переставленных цифр или старого индекса, скопированного в новый адрес. Ни одно поле само по себе не выдаёт проблему, поскольку по отдельности оба корректны.
Геокодируйте полный адрес через /v1/forward, чтобы увидеть, какой почтовый индекс ему на самом деле соответствует, и отдельно найдите введённый клиентом индекс через /v1/postcode, чтобы увидеть, какую область он покрывает.
GET /v1/forward?q=10 Downing Street, London&limit=1{
"status": "ok",
"results": [
{"formatted": "10 Downing Street, London, UK", "lat": 51.5033, "lon": -0.1276, "type": "address", "precision": "house", "confidence": 0.96, "place_id": "op678", "components": {"postcode": "SW1A 2AA", "city": "London"}}
]
}GET /v1/postcode?code=SW1A 1AA&country=GB{
"status": "ok",
"postcode": "SW1A 1AA",
"country_code": "GB",
"results": [{"lat": 51.5014, "lon": -0.1419, "components": {"city": "London", "region": "Greater London"}}]
}Если компонент postcode из результата поиска по адресу не совпадает с индексом, который ввёл клиент, как в этом примере, это расхождение стоит отметить, даже если и адрес, и индекс по отдельности оказались реальными. Прямое сравнение двух компонентов надёжнее, чем сравнение расстояния между двумя парами координат, поскольку область почтового индекса может быть настолько маленькой, что даже при настоящем совпадении её точка не будет лежать точно на координатах адреса.
Та же проверка выявляет и гораздо более очевидную ошибку: почтовый индекс, введённый для совсем другой страны или региона, чем сам адрес, например индекс в британском формате вместе с адресом, который на самом деле находится в другой стране. Сравнение компонента country из результата по адресу с параметром country, использованным для поиска по индексу, ещё до более подробного сравнения индексов, является дешёвой первой проверкой, которая рано отсеивает такие крупные ошибки.
Покажите клиенту оба значения рядом и попросите подтвердить, какое из них верное, а не выбирайте молча одно из них и не отклоняйте заказ сразу. Переставленную цифру легко исправить, как только на неё указали, а настоящий пограничный случай, когда почтовый индекс законно покрывает границу между двумя часто используемыми значениями, встречается достаточно редко, чтобы решать его быстрым ручным подтверждением.
Не сравнивайте две пары координат напрямую с порогом расстояния вместо сравнения самих компонентов индекса. Область почтового индекса может быть настолько маленькой, что даже при полностью правильном совпадении между репрезентативной точкой индекса и координатами конкретного здания будет некоторое расстояние, а может быть и настолько большой, что действительно несовпадающая пара всё равно уложится в мягкий порог расстояния. Сравнение самого текста индекса является более прямой и надёжной проверкой, чем попытка вывести совпадение из расстояния.
Область почтового индекса, лежащая прямо на границе между двумя административными регионами, может вполне законно возвращать набор компонентов, который выглядит немного по-разному в зависимости от того, какой эндпоинт его определил, даже если оба результата верны. К близкому, но не точному текстовому совпадению, например к разнице только в написании названия региона, относитесь мягче, чем к совершенно другому почтовому индексу.
Для пакета существующих заказов, а не одной новой отправки формы, оба эндпоинта принимают массив в массовом POST, поэтому накопившиеся заказы можно проверить, отправив адреса одним массовым запросом в /v1/forward, а почтовые индексы другим массовым запросом в /v1/postcode, и затем сравнив два массива результатов по позиции.
Эта проверка использует два запроса на заказ, один для адреса и один для почтового индекса, и оба учитываются в вашей дневной квоте так же, как любой другой поиск. Это разумная цена за выявление ошибки, которая иначе обернулась бы неудачной доставкой.
Поймать несовпадающий почтовый индекс до отправки заказа стоит того второго запроса, который требуется для проверки. Подробности об обоих эндпоинтах в документации по прямому геокодированию и документации по поиску почтовых индексов.