При интеграции внешних веб-сервисов с 1С разработчики нередко сталкиваются с трудностями при выборе способа отправки данных. В данной статье мы разберем ситуацию, когда попытка «усложнить» запрос путем передачи параметров в теле JSON-объекта привела к ошибкам, и выясним, как правильно взаимодействовать с Google Maps API.
Часто программисты, привыкшие к современной архитектуре REST API, ожидают, что любой сервис будет принимать данные в теле запроса (Request Body) в формате JSON. Однако Google Geocoding API является классическим RESTful сервисом, который проектировался для использования через HTTP GET.
Рассмотрим причины, по которым возникли ошибки в примере автора:
/json).POST-запрос с заголовком Content-Type: application/json. Сервер Google ожидает параметры в самой строке URL, а не в теле сообщения, поэтому «не понимает» отправленный нами JSON.Для корректного получения координат по адресу необходимо сформировать URL, в котором все параметры (адрес, язык, ключ доступа) передаются непосредственно в строке запроса. Давайте разберем, как это реализовать средствами платформы 1С.
Для выполнения запроса мы будем использовать объект HTTPСоединение, а для формирования запроса — HTTPЗапрос. Важно убедиться, что ЗащищенноеСоединениеOpenSSL настроено корректно, так как Google API работает только по протоколу HTTPS.
Рассмотрим пример кода, который позволит нам успешно получить координаты:
Адрес = "Москва, Красная площадь";
// Формируем URL с параметрами. Важно помнить о кодировании спецсимволов!
URLЗапроса = "maps/api/geocode/json?address=" + КодироватьСтроку(Адрес, СпособКодированияСтроки.КодированиеURL) + "&language=ru&key=ВАШ_API_KEY";
// Создаем соединение с сервером
Соединение = Новый HTTPСоединение("maps.googleapis.com", 443, , , Новый ЗащищенноеСоединениеOpenSSL());
// Формируем запрос
Запрос = Новый HTTPЗапрос(URLЗапроса);
// Получаем результат
Результат = Соединение.Получить(Запрос);
// Проверяем статус ответа
Если Результат.КодСостояния = 200 Тогда
ОтветСтрокой = Результат.ПолучитьТелоКакСтроку();
// Дальнейшая обработка полученного JSON
КонецЕсли;
Чтобы ваша интеграция работала стабильно и безопасно, обратите внимание на следующие аспекты:
КодироватьСтроку с параметром СпособКодированияСтроки.КодированиеURL. Без этого вы рискуете получить ошибку при передаче сложных адресов.Google Cloud Platform обязательно настройте ограничения (API Restrictions или Application Restrictions), чтобы ваш ключ нельзя было использовать с чужих серверов.JSON используйте объект ЧтениеJSON и ПрочитатьJSON для преобразования данных в структуру 1С, с которой удобно работать в коде.Google Maps API имеет квоты на количество запросов в сутки. При массовой обработке данных (например, при геокодировании всей базы контрагентов) рекомендуется использовать паузы между запросами, чтобы не попасть под блокировку.Таким образом, для работы с Google Geocoding не нужно усложнять архитектуру отправкой тела JSON. Достаточно сформировать корректную строку URL, закодировать параметры и выполнить стандартный GET-запрос. Это самый быстрый и надежный способ интеграции, предусмотренный официальной документацией сервиса.