Гайды

Микросервисы на Go: Gin и Fiber

Маршруты и middleware, graceful shutdown, observability и чек-лист для HTTP API на Go.

~9 мин чтения

Микросервисы на Go: Gin и Fiber

Gin и Fiber — популярные HTTP-фреймворки для Go: маршруты, middleware, JSON binding. Go хорошо подходит для лёгких микросервисов с низкой задержкой. Паттерны — микросервисная архитектура; конкурентность — Go: горутины и каналы; устойчивость вызовов — Circuit breaker и retry.


1. Gin: скелет

go
r := gin.Default()
r.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{"ok": true}) })
r.Run(":8080")

Middleware — цепочка c.Next(), логирование, recovery, auth.


2. Fiber

Express-подобный API, быстрый роутер на fasthttp (внимание к совместимости с net/http middleware). Подходит для edge/API gateway слоёв.


3. Конфигурация и graceful shutdown

12-factor: env. signal.Notify + http.Server.Shutdown (Gin оборачивает net/http).


4. Observability

OpenTelemetry Go SDK — трассировки и метрики — см. OpenTelemetry.


5. Binding и валидация

Gin: ShouldBindJSON + ручная проверка или binding tags на структурах; для сложных правил — отдельный слой до хендлера. Fiber: BodyParser с тем же принципом. Возвращайте единый формат ошибок (JSON с полями полей), не стек в проде.


6. Контекст и отмена

Прокидывайте context.Context из входящего запроса (c.Request.Context()) в вызовы БД и HTTP-клиентов — отмена при обрыве клиента освобождает ресурсы. Не запускайте фоновые горутины без контекста и явного завершения при shutdown.


7. Тестирование

httptest.NewRecorder + роутер для интеграционных тестов без сети. Для Fiber учитывайте разницу с net/http при переиспользовании middleware с стандартной библиотеки.


8. Чек-лист

  • Валидация входа (validator lib / generated).
  • Лимиты тела запроса, таймауты сервера.
  • Статический анализ (staticcheck, golangci-lint).
  • Structured logging (slog/zap) с request_id из заголовка или middleware.
  • ReadHeaderTimeout и лимиты на заголовки против slowloris.

Дальше: gRPC на Python и Go