Backend#
Как собрать боевой сервис: структура проекта, net/http, middleware, REST и gRPC, аутентификация, корректное завершение.
Оглавление#
Статьи идут в порядке чтения: от базы к деталям. Всего 12 статей.
- Структура Go-проекта — Первый вопрос новичка в Go: «где официальная структура проекта?» Ответа нет — команда Go её не публиковала, а популярный репозиторий
project-layout, который… - net/http: Server, Handler, ServeMux, таймауты, Client и контекст —
net/http— встроенные в язык HTTP-сервер и клиент. - Middleware-паттерн в Go — Middleware — функция, которая берёт обработчик и возвращает новый обработчик, обёрнутый дополнительным поведением: логированием, авторизацией, метриками.
- REST: принципы, версионирование, идемпотентность, статусы, пагинация, ошибки — REST — набор соглашений о том, как выразить операции над данными через адреса и HTTP-методы.
- OpenAPI/Swagger, code generation, contract-first vs code-first, валидация — OpenAPI — машиночитаемое описание твоего HTTP API: какие есть эндпоинты, что они принимают и что возвращают.
- gRPC: типы RPC, интерсепторы, контекст, метаданные, error model — gRPC позволяет вызвать функцию в чужом сервисе так, будто она локальная: описываешь её сигнатуру в
.proto, генератор делает и клиент, и заготовку сервера. - Protocol Buffers: схемы, wire format, эволюция и совместимость — Protobuf — бинарный формат, в котором по сети едут не имена полей, а их номера.
- Аутентификация и авторизация: AuthN/AuthZ, сессии vs токены, RBAC/ABAC, API keys, mTLS, секреты — Аутентификация отвечает на вопрос «кто ты», авторизация — «что тебе можно».
- JWT (JSON Web Token) — JWT — это не шифрование, а подпись: содержимое токена может прочитать кто угодно.
- OAuth2: роли, grant types, OIDC, токены и типовые ошибки — OAuth2 — протокол делегирования доступа: как дать приложению доступ к твоим данным в другом сервисе, не отдавая ему пароль.
- Graceful Shutdown HTTP/gRPC сервера в Go — Graceful shutdown — это когда сервис при остановке сначала дорабатывает уже принятые запросы и только потом выключается.
- Чистая архитектура и внедрение зависимостей в Go — Чистая архитектура — это одно правило и куча названий вокруг него.