En

JazzTeam Software Development Company

Agile Java Development

GetAddressByIP – сервис по определению геолокации устройства по IP-адресу

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

Многие компании прибегают к работе с такими сервисами для контроля и оптимизации своих бизнес процессов. Польза заключается в том, что приложение всегда в курсе, где находится устройство и, в зависимости от задач, предоставляет самую актуальную информацию по запросу, либо в качестве предложения.

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

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

Наша команда разработала собственный Mule REST-сервис (название – GetAdressByIP), который может использовать сторонние сервисы для определения геолокации. Для случаев, когда IP-адреса устройств, на которых развернуты приложения, недоступны, IP-адрес устройства определяется с помощью HTTP/HTTPS заголовка X-Forwarded-For.

Алгоритм работы GetAdressByIP следующий:

  1. GetAdressByIP принимает запрос на определение местоположения. Для ограничения доступа к приложению сторонних лиц, в параметрах запроса REST-интерфейс принимает api_key – уникальный идентификатор, используемый для аутентификации вызывающей программы.
  2. После успешной авторизации происходит извлечение IP-адреса из HTTP(S)-заголовка запроса, а для идентификации происхождения IP-адреса пользователя, к примеру, может применятся заголовок X-Forwarded-For.
  3. Далее формируется и отправляется запрос на получение местоположения пользователя в стороннее API, в соответствии с заданной конфигурацией. В конфигурации указывается, какой требуется использовать сторонний сервис для определения геолокации.
  4. Полученный ответ в поступает обратно в GetAdressByIP, где обрабатывается и отправляется приложению клиента, от которого пришел первоначальный запрос.

Обмен данными между клиентом и сервером производится в формате JSON. Схема работы приложения приведена на рисунке 1.

GetAdressByIP
Рисунок 1 – Схема взаимодействия реализованного приложения с приложениями клиента и внешним сервисом определения адреса

Одним из требований заказчика было минимизировать трудозатраты на этапах развертывания и тестирования. Разработчики должны максимально сконцентрироваться непосредственно на разработке программного продукта. Для выполнения данного требования был внедрен процесс Continuous Integration, Continuous Delivery (CI/CD) на базе Jenkins. На базе Jenkins автоматизировали 5 процессов:

В итоге, это существенно сократило время разработчиков, которое они тратили на сборку, тестирование и деплоймент новых версий вручную.

На этапе тестирования был применен подход Data Driven Testing. Выполняемые интеграционные тесты покрывали широкий спектр кейсов.

Технологии:

Stack: Mule ESB, JSON, Apache Maven, Sonatype Nexus.
Infrastructure: Jenkins, Git, Anypoint Studio.
Test Automation Libraries: MUnit.
Protocols: HTTP(S), REST.

Особенности проекта:

Результат проекта:

Достижения компании на проекте: