Chi: лёгкий роутер Go для HTTP-сервисов и REST API
Стандартный ServeMux в Go не умеет параметры пути и middleware по группам, а тяжёлые фреймворки тянут собственные контексты запроса и обёртки ответа. Chi занимает середину: совместим с net/http на сто процентов — любой http.Handler работает без адаптеров — и при этом даёт URL-параметры, цепочки middleware, группы маршрутов и встроенные утилиты от RequestID до таймаутов. В англоязычных проектах его называют chi router или go-chi — речь всегда про один пакет github.com/go-chi/chi/v5, самый популярный лёгкий роутер экосистемы Go.
Курс ведёт от первого r.Get до production-каркаса: маршруты и методы, параметры и wildcards, собственные middleware, группы и подроутеры, JSON API с валидацией, централизованные ошибки, таймауты и троттлинг, CORS, graceful shutdown, тестирование хендлеров через httptest и деплой за reverse-прокси.
Итоговый проект — REST API записной книжки: слоистая структура, middleware-цепочка, валидация, ошибки и тесты. Каждый элемент каркаса к этому моменту уже собран руками в уроках — проект склеивает их в работающий сервис.
Чему научитесь
Чему научитесь
- Строить маршруты chi: методы, параметры пути, wildcards
- Писать middleware и понимать порядок их выполнения
- Группировать маршруты: Route, Group и подроутеры
- Прокидывать данные в хендлеры через context.Context
- Делать JSON API: парсинг, валидация, централизованные ошибки
- Защищать сервис: таймауты, троттлинг, Recoverer, graceful shutdown
- Тестировать хендлеры httptest и деплоить сервис за прокси
Для кого курс
- Разработчикам, которым нужен быстрый HTTP-сервис без веса фреймворка
- Тем, кто знает net/http и хочет URL-параметры с middleware без магии
- Командам, выбирающим роутер для микросервисов на Go
Что понадобится
- Базовый Go: функции, структуры, ошибки (курс «Go с нуля»)
- Общее представление об HTTP: методы, заголовки, коды ответов
Программа курса: 25 уроков
- 1Знакомство с Chi: роутер с чистой кровью net/httpНиша chi между ServeMux и тяжёлыми фреймворками: совместимость и возможности.~18 мин · chi golang, роутер chi
- 2Первый сервер на chichi.NewRouter, r.Get и http.ListenAndServe: минимальный сервис.~18 мин · первый сервер chi, chi hello world
- 3Маршруты и HTTP-методы: Get, Post, Put, DeleteОдин ресурс — пять методов: REST-каркас на маршрутах chi.~18 мин · chi маршруты, http методы chi
- 4URLParam: параметры пути и query-строкаСлэги и id из пути: chi.URLParam и отличие от query.~18 мин · chi urlparam, параметры пути go
- 5Middleware в chi: Use и цепочкаЛуковица middleware: что такое func(http.Handler) http.Handler.~18 мин · chi middleware, middleware go
- 6Встроенные middleware: Logger, Recoverer, RequestIDГотовые утилиты chi: лог, паники, идентификаторы запросов.~18 мин · chi logger recoverer, встроенные middleware chi
- 7Route и Group: группируем маршрутыОбщие middleware на ветку: подроутеры и префиксы.~18 мин · chi route group, группы маршрутов chi
- 8Mount и статика: FileServerМонтируем обработчики и отдаём статику без лишних зависимостей.~16 мин · chi mount, статика chi
- 9Wildcards: маршруты со звёздочкой/files/* и жадные пути: когда wildcard лучше параметра.~16 мин · chi wildcard, маршруты со звёздочкой
- 10context.Context: прокидываем данные в хендлерыКладём пользователя и зависимости в контекст и достаём их в хендлере.~18 мин · chi context, context go middleware
- 11JSON API: парсим и отдаём JSONДекодер и энкодер стандартной библиотеки в хендлерах chi.~18 мин · json api go, chi json
- 12Собственный middleware: таймер, лог, авторизацияПишем func(http.Handler) http.Handler для своих задач.~18 мин · собственный middleware go, авторизация middleware
- 13Timeout и Throttle: защита от перегрузкиДедлайны хендлеров и очередь запросов: предохранители chi.~18 мин · chi timeout throttle, таймауты go
- 14CORS: чиним браузерные запросыPreflight, заголовки и встроенный cors.Handler.~18 мин · chi cors, cors go
- 15Централизованные ошибки: errorHandler и NotFoundОдин формат ответов об ошибках на весь сервис.~18 мин · chi ошибки, error handling go
- 16Graceful shutdown: выключаемся вежливоSignal.NotifyContext и Shutdown: без обрывов на деплое.~18 мин · graceful shutdown go, chi graceful
- 17Валидация параметров и тел запросовПроверяем id, лимиты и поля: ранняя валидация в middleware и хендлерах.~18 мин · валидация запросов go, chi валидация
- 18Порядок middleware: почему он важенRequestID до Logger, Recoverer до всего: логика слоёв.~16 мин · порядок middleware, chi middleware цепочка
- 19Subrouters и структура большого сервисаРаскладываем API по пакетам: роутер собирается из кусков.~18 мин · chi subrouter, структура проекта go
- 20Тестирование хендлеров: httptest и chiЗапрос к роутеру без сети: статус, тело, заголовки.~18 мин · тестирование chi, httptest go
- 21Аутентификация: JWT и сессии как middlewareПроверяем токен один раз и кладём пользователя в контекст.~18 мин · chi jwt, аутентификация go
- 22Производительность chi: что под капотомTrie-роутер, аллокации и бенчмарки: откуда берётся скорость.~16 мин · chi производительность, роутер trie go
- 23Деплой: chi за reverse-проксиNginx и Caddy перед сервисом: заголовки, TLS, таймауты.~18 мин · деплой go сервиса, chi nginx
- 24Chi против Gin, Echo и стандартного muxКритерии выбора роутера: совместимость, вес, экосистема.~16 мин · chi vs gin, сравнение роутеров go
- 25Итоговый проект: REST API на chiЗаписная книжка: слои, middleware, валидация, тесты и деплой.~24 мин · chi итоговый проект, rest api chi
Вопросы о курсе
Чем Chi отличается от Gin и Echo?
Gin и Echo используют собственные реализации контекста и ответа: код завязывается на их типы. Chi построен поверх net/http: хендлеры — обычные http.HandlerFunc, и любой код стандартной библиотеки и middleware из экосистемы работает как есть. На сайте есть отдельные курсы по Gin и Echo, а урок сравнения покажет, где проходит граница выбора.
Подходит ли Chi для больших проектов?
Да: подроутеры, группы и middleware-цепочки покрывают структуру сервисов любого размера, а совместимость с net/http означает, что миграция кусков кода в обе стороны не требует переписывания. В курсе отдельный урок посвящён структуре большого сервиса на подроутерах.
Почему курс начинается с net/http, а не сразу с chi?
Chi — это надстройка над стандартным интерфейсом, и без понимания http.Handler и http.ResponseWriter половина его механики выглядит магией. Первые уроки аккуратно связывают знакомый net/http с chi-роутером: что именно добавляет роутер и где остаётся чистый стандарт.