От кредитной модели к опубликованной лестнице.
Меняются не столько параметры, сколько счётчик. Google считает загрузки карты по сессиям и вычитает потребление из месячного кредита; мы считаем тайлы и запросы, публично и без кредита, вокруг которого нужно моделировать.
- Тарификация за запрос, которую можно посчитать до счёта
- Тайлы считаются по тайлам — обычно дешевле для долгих сессий
- Никакой матрицы SKU: десять сервисов, десять тарифов
- Хранение данных в ЕС без enterprise-договора
Замена
Хост и заголовок авторизации. Всё ниже — карта параметров.
- https://maps.googleapis.com?key=YOUR_KEY
+ https://api.apinavi.com
+ Authorization: Bearer $APINAVI_KEYКарта параметров
Geocoding
| Google Maps | ApiNavi | Note |
|---|---|---|
| GET /maps/api/geocode/json?address= | GET /v1/geocode?q= | — |
| GET /maps/api/geocode/json?latlng= | GET /v1/revgeocode?at= | — |
| components=country:DE | in=countryCode:DEU | ISO alpha-3 rather than alpha-2. |
| results[].formatted_address | items[].address.label | — |
| results[].geometry.location | items[].position | lat/lng keys are the same. |
| results[].place_id | items[].id | Identifiers are not interchangeable; re-resolve saved places once. |
Routes & places
| Google Maps | ApiNavi | Note |
|---|---|---|
| POST /directions/v2:computeRoutes | GET /v1/routes | — |
| routes[].legs[].distanceMeters | routes[].sections[].summary.length | — |
| routes[].duration | routes[].sections[].summary.duration | Seconds in both, without the trailing s. |
| POST /places:autocomplete | GET /v1/autosuggest | — |
| GET /maps/api/distancematrix/json | POST /v1/matrix | — |
| Map load (per session) | Tile requests | Metering differs: we bill tiles, not map loads — usually cheaper for long sessions, dearer for one-glance views. |
Где это не замена один в один
Загрузки карты против тайлов
Сессия с активным панорамированием и зумом здесь дороже; страница с одним взглядом на карту — дешевле. В калькуляторе оба профиля есть как пресеты.
Порядок координат
Google возвращает geometry.location объектом, и мы тоже. Но наш вывод в GeoJSON идёт долготой вперёд по спецификации — проверьте тот путь, которым пойдёте.
Идентификаторы мест
Значения place_id не переносятся. Всё, что вы сохранили, нужно один раз перевывести по координатам или адресу.
Панорамы улиц
Аналога Street View у нас нет. Если продукт на него опирается, эту часть оставьте там, где она есть.
Как это обычно делают
- 01
Тень
Неделю отправляйте копию боевого трафика обоим. Для пользователя ничего не меняется.
- 02
Сравнение
Сравните поле за полем на тех эндпоинтах, которыми реально пользуетесь. Обычно находится два-три настоящих отличия, а не двадцать.
- 03
Разделение
Переведите 5%, затем 50%, наблюдая за долей ошибок и задержкой по регионам.
- 04
Переключение
Переведите остальное, оставьте старый ключ живым на пару недель, потом отзовите.
Режим двойного прогона
Направьте часть трафика обоим поставщикам и сравните ответы. В консоли видно расхождение по полям на каждом эндпоинте, поэтому переключение делается по данным, а не по выборочной проверке.
Если решите уйти
Те же таблицы читаются в обратную сторону, а эндпоинт экспорта отдаёт ваши геозоны, стили и результаты пакетов в открытых форматах. Гайд по миграции, который смотрит только внутрь, — это тревожный признак, а не фича.
Чек-лист переключения
- Лимиты на новом ключе подняты до разделения трафика, а не после
- Потолок расходов выставлен на первый полный месяц
- Сохранённые идентификаторы мест перевыведены, если вы их храните
- Декодер полилинии проверен на известном маршруте
- Покрытие сверено по странам из длинного хвоста трафика
- Старый ключ отозван и удалён из секретов