Вы видите много историй о том, как решать сложные задачи или как спроектировать проект производственного уровня. Чего вы не видите достаточно, так это того, как сделать что-то столь же простое, как создание 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®ionKey=testRegion
Обертывание функций построения URL-адресов в структуру позволяет легко комбинировать статические и динамические значения с детальным контролем над каждым маршрутом, но с гибкостью для обработки любых вариантов. Более того, эта стратегия позволяет вам моделировать и тестировать целые группы маршрутов одновременно, которые можно копировать и вставлять в микросервисы. Функциональный ответ может легко стать параметром в других методах для получения желаемой информации, и вам нужно только обновить его в одном месте, если вы решите внести изменения.
Хотя это кажется тривиальной частью приложения, по мере того, как вы начинаете добавлять все больше и больше API, построение маршрута для их соединения может быстро выйти из-под контроля. Подобные стратегии во всем приложении позволяют вам оставаться без ошибок… и в здравом уме.
Спасибо за чтение!