Как перестать воевать со стандартным http.Client в Go

09 Jul, 2026
11,719
🔱 786
👥 91

Стандартная библиотека Go — штука монументальная и надежная, но когда дело доходит до написания HTTP-клиента для реального проекта, начинаешь чувствовать себя архитектором, которому выдали только кирпичи и мастерок, забыв про бетономешалку. Хочется просто отправить JSON и получить ответ, а приходится вручную маршалить структуры, следить за закрытием body, настраивать таймауты и писать бесконечные обертки для обработки ошибок.

Если вам знакомо чувство, когда if err != nil при работе с API занимает 70% кода, то проект resty — это именно та «бетономешалка», которой не хватает.

Resty Logo

Что это такое и зачем оно в вашем проекте

По сути, resty — это надстройка над стандартным http.Client. Она не пытается переизобрести колесо, а просто делает работу с HTTP-запросами в Go человеческой. Проект живет с 2015 года, собрал больше 11 тысяч звезд и стал своего рода стандартом де-факто для тех, кто не хочет тратить время на бойлерплейт.

Главная фишка здесь — цепочечные вызовы (Fluent Interface). Вы описываете запрос как предложение, и это читается гораздо лучше, чем классическое создание http.Request с последующим client.Do(req).

Чем resty упрощает жизнь

Я выделил несколько вещей, которые заставляют меня подключать этот пакет в каждый второй микросервис.

Автоматизация JSON и XML

В стандартном клиенте вам нужно сначала превратить структуру в байты через json.Marshal, создать bytes.Reader, установить заголовок Content-Type... В resty вы просто передаете объект в метод SetBody. Библиотека сама поймет, как его упаковать, и подставит нужные заголовки. То же самое работает и в обратную сторону: передаете пустую структуру в SetResult, и на выходе получаете уже заполненный объект.

client := resty.New()

var user User
resp, err := client.R().
    SetBody(&User{Name: "John"}).
    SetResult(&user).
    Post("https://api.example.com/users")

Умные повторы запросов

Сеть нестабильна, API иногда «моргает». Писать свою логику ретраев с экспоненциальной задержкой — сомнительное удовольствие. В resty это включается одной строкой. Можно настроить количество попыток, время ожидания и даже условия, при которых стоит пробовать снова (например, только если пришел статус 502 или 504).

Поддержка Server-Sent Events (SSE)

В версии v3 появилась полноценная поддержка SSE. Если вам нужно слушать поток событий от сервера, не нужно городить циклы и вручную парсить чанки данных. Resty берет это на себя, предоставляя удобный интерфейс для подписки на события.

Трассировка и отладка

Иногда нужно понять, почему запрос идет медленно или где именно он застревает. Resty умеет собирать детальную статистику: время резолва DNS, установки TCP-соединения, TLS-хендшейка и время до получения первого байта. Плюс есть встроенная поддержка логирования в стиле curl — можно одной командой вывести в консоль эквивалент запроса, который легко скопировать и проверить в терминале.

Технические нюансы

Проект требует Go версии 1.23 и выше для актуальной ветки v3. Архитектурно он построен вокруг двух сущностей: Client и Request. Вы настраиваете общие параметры (базовый URL, заголовки авторизации, таймауты) на уровне клиента, а специфику конкретного вызова — на уровне запроса.

Интересно, что авторы очень серьезно относятся к качеству кода. В README подчеркивается, что любой Pull Request должен сопровождаться тестами со 100% покрытием патча. Это объясняет, почему библиотека остается стабильной на протяжении многих лет.

Когда стоит использовать

Resty идеально подходит для:

  • Написания SDK для своих или сторонних API.
  • Интеграции микросервисов внутри системы.
  • Быстрых скриптов для парсинга или автоматизации.

Если у вас очень простой проект с парой запросов, возможно, стандартного http.Client будет достаточно. Но как только появляется необходимость в авторизации, логировании, ретраях и работе с JSON-ответами, resty экономит часы написания однотипного кода.

Стоит ли пробовать? Определенно да, если вы пишете на Go и работаете с внешними сервисами. Это не «тяжеловесный» фреймворк, который диктует свои правила, а просто очень удобный и предсказуемый инструмент. Начать можно с официальной документации на resty.dev, там много живых примеров кода под разные задачи.

Единственный момент: если вы привыкли к абсолютному контролю над каждым байтом в http.Transport, вам может показаться, что resty скрывает слишком много магии. Но для 95% бизнес-задач эта «магия» — именно то, что нужно для спокойного сна разработчика.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.