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

В этом руководстве мы расскажем, как создавать URL-адреса чисто, на основе конфигурации и, что самое главное, тестируемые :). Напишем код.

Во-первых, мы собираемся определить нашу структуру, структура будет нашей основой для создания URL-адресов, управляемых конфигурацией. Почти каждый URL-адрес REST состоит из статических (хост, схема и т. Д.) И динамических частей (параметры запроса и маршрута). В структуре будут размещены все наши статические части, полученные из конфигурации приложения.

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

Из приведенного выше примера видно, что я имитирую подключение к бесплатному внешнему REST API api.weatherapi.com.

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

Вверху у нас есть тип возвращаемого значения Formatter, который в основном просто определяет, что будет возвращать наш приемник метода. Строка для метода HTTP и встроенный тип Golang url.URL в качестве второго.

Затем мы создаем наш базовый объект url.URL со значениями, хранящимися в структуре, поскольку это приемник метода go. Это должны быть статические значения на основе конфигурации, которые вы добавляете к этому конкретному URL-адресу.

Ниже статических значений мы добавляем параметры динамического запроса к URL-адресу, которые мы кодируем и назначаем.

Давайте посмотрим на нашу main.go интеграцию с нашим новым приемником построения URL.

go run main.go
2021/06/22 22:36:51 GET
2021/06/22 22:36:51 https://api.weatherapi.com/forecast.json?dateKey=testDate&regionKey=testRegion

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

Хотя это кажется тривиальной частью приложения, по мере того, как вы начинаете добавлять все больше и больше API, построение маршрута для их соединения может быстро выйти из-под контроля. Подобные стратегии во всем приложении позволяют вам оставаться без ошибок… и в здравом уме.

Спасибо за чтение!