import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/ApiHeaders - Заголовки API-запросов'/>

# Класс ApiHeaders

Класс для управления и слияния заголовков HTTP-запросов. Он обрабатывает заголовки по умолчанию для всего приложения, пользовательские заголовки для конкретных запросов и автоматическое назначение `Content-Type`.

> `ApiHeaders` является **вспомогательным классом**, предназначенным для управления HTTP-заголовками. В большинстве случаев рекомендуется определять глобальные заголовки через параметр `headers` в глобальной конфигурации `Api`.

## Ключевые особенности

- **Заголовки по умолчанию** — Установите глобальные заголовки, такие как `Authorization` или `X-App-Version`, один раз.
- **Динамический Content-Type** — Автоматически управляет заголовком `Content-Type` (по умолчанию `application/json;charset=UTF-8`).
- **Безопасное слияние** — Объединяет несколько источников заголовков без изменения исходных объектов.
- **Валидация** — Гарантирует, что для заголовков используются только допустимые объекты.

## Методы

### Действие

#### `get`

Объединяет заголовки по умолчанию с пользовательскими и добавляет `Content-Type`. Если параметр `value` равен `null`, заголовки отключаются.

**Параметры:**
- `value?: Record<string, string> | null` — Пользовательские заголовки для слияния.
- `type: string | undefined | null` — Значение `Content-Type` (по умолчанию `application/json;charset=UTF-8`).

**Возвращает:** `Record<string, string> | undefined` — Объект объединенных заголовков.

#### `getByRequest`

Специализированная версия метода `get`, которая корректирует заголовки в зависимости от типа запроса. В частности, она гарантирует, что `Content-Type` не устанавливается вручную для `FormData`, чтобы обеспечить корректную генерацию `boundary`.

**Параметры:**
- `request: ApiFetch['request']` — Данные запроса (Объект, FormData или Строка).
- `value?: Record<string, string> | null` — Пользовательские заголовки.
- `type: string` — Желаемый `Content-Type`.

**Возвращает:** `Record<string, string> | undefined` — Обработанный объект заголовков.

### Конфигурация

- `set(headers: Record<string, string>): this` — Устанавливает или обновляет заголовки по умолчанию.

## Типы

#### `ApiHeadersValue`
Обычный объект, представляющий HTTP-заголовки.
- `[key: string]: string` — Пары ключ-значение, где ключ — имя заголовка, а значение — содержимое заголовка.
