ДжазТим — надежный технологический партнер

Agile разработка ПО на Java

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 процессов:

  • Сборка. Jenkins запускает сборку проекта после каждого коммита.
  • Публикация. Этот расширяет версию продукта, создает новый тег в svn и делает публикацию созданного zip-архива в репозиторий Sonatype Nexus.
  • Откат изменений. Если в процессе публикации произошли ошибки, этот процесс помогает выполнить откат внесенных изменений.
  • Релиз. Он получает номер требуемой версии сервиса GetAdressByIP, загружает его из Nexus и развертывает на сервере Mule приложений.
  • Сборка и деплой. Запускается вручную и выполняет то же самое, что и все описанные выше процессы, за исключением создания релиза. Оно предназначено для разработчика, который хочет проверить, как приложение работает на Mule сервере.

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

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

Технологии

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

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

  • Сжатые сроки реализации проекта;
  • Необходимость определять IP адрес как по HTTP(S)-заголовку, так и принимать его как параметр запроса (например, ?addr=123.123.123.123);
  • Необходимость внедрения CI/CD.

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

  • Проект успешно реализован. Мы создали REST-интерфейс, который может работать с различными поставщиками сервиса определения адреса по IP, при этом смена поставщика не влияет на приложения, отправляющие запрос на наш сервис.
  • Применена концепция CI/CD.

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

  • Основной функционал покрыт юнит-тестами.
  • Многие из наших наработок по реализации Mule-решений на этом проекте послужили основой для создания статьи Лучшие практики использования Mule ESB.

Свяжитесь с нами, чтобы обсудить Ваш IT-проект

    Имя *

    Название компании

    Email *

    Телефон

    Чем мы можем Вам помочь? *

    * – Обязательные поля для заполнения